2014 dxdy logo

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

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




 
 Маленький вопрос по Java
Сообщение09.03.2014, 16:29 
Код:
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 
Вы перепутали = и ==. Не зря, видимо, пишут, что это частое явление. Кроме того, on == true — это просто on. Может, компилятор и оптимизирует, но выглядит это весело…

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

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

 
 
 
 Re: Маленький вопрос по Java
Сообщение09.03.2014, 17:55 
Нет , поле on не нужно использовать извне. А какие есть правила именования атрибутов класса?

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

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group