2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Маленький вопрос по Java
Сообщение09.03.2014, 16:29 


05/08/13
8
Код:
class Burner {
   public boolean on = false ;
   
   double power = 0 ;

   void burnfire(){
      on = true ;
      System.out.println("Fire burned");
   }   
   
   void resetburn() {
      on = false;
   }

   void addpower(double plus) {
      if (power > 99){
         System.out.println("Too much gaz");
         System.out.println("1");

      }else
      {
         System.out.println(on);
         if (on = true) {
            power = power + plus ;
             System.out.println("2");
   
         }
         else {
            System.out.println("Burn fire") ;
             System.out.println("3");

         }   
      }   
   }
    void reducepower(double minus) {
      if ((power - minus)< 0) {
         System.out.println("There isn't gaz") ;
      }
      else{      
          if (on = true) {
                           power = power - minus ;
                      }
                      else {
                           System.out.println("Burn fire") ;
                      }
      }
        }
   void resetpower(){
      power = 0 ;
   }   
}


class Oven extends Burner{
   
   boolean rotate = false;

   void rotateon() {
      rotate = true ;
   }
   
   void resetrotate(){
      rotate = false ;
   }


}

class Range{
   Burner burners[] = {new Burner(),new Burner(),new Burner(),new Burner(),new Oven()};   
}

public class Task1 {

   public static void main(String[] args){
      Range Cook = new Range() ;
      System.out.println(Cook.burners[0].on);
      System.out.println(Cook.burners[0].power);
      Cook.burners[0].resetburn() ;
      Cook.burners[0].addpower(1.0);
      System.out.println(Cook.burners[0].power);

/*      Cook.burners[0].burnfire() ; */
/*      Cook.burners[4].burnfire() ;*/             
   }

}








На печать выводит:

Цитата:
false
0.0
false
2
1.0


Вопрос: т.к Cook.burners[0].on = false, то Cook.burners[0].addpower(1.0) должен идти по ветке 3 и не прибавлять значение power. Почему происходит иначе? Как в Java работать с областью видимости переменных?

 Профиль  
                  
 
 Re: Маленький вопрос по Java
Сообщение09.03.2014, 17:03 
Заслуженный участник


27/04/09
28128
Вы перепутали = и ==. Не зря, видимо, пишут, что это частое явление. Кроме того, on == true — это просто on. Может, компилятор и оптимизирует, но выглядит это весело…

Не вчитывался, но, кажется, с дизайном класса Burner непорядок. Поле on могло бы быть и приватным — или к нему обязательно нужен доступ извне, несмотря на то что все его значения могут быть установлены методами?

(Про ошибки типа gaz вместо gas, выравнивание и именование атрибутов класса умолчу.)

 Профиль  
                  
 
 Re: Маленький вопрос по Java
Сообщение09.03.2014, 17:55 


05/08/13
8
Нет , поле on не нужно использовать извне. А какие есть правила именования атрибутов класса?

 Профиль  
                  
 
 Re: Маленький вопрос по Java
Сообщение09.03.2014, 18:04 
Заслуженный участник


27/04/09
28128
Не выписывать же здесь — для этого есть книги. Есть одна, посвещённая этому, «Совершенный код» (Code complete) С. Макконнелла; есть и другие, и во многих книгах о программировании на каком-то конкретном языке это упоминается в применении к нему. Не обладаю информацией, какую книгу лучше выбрать.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group