2017-02-14 16 views
1

Я пытаюсь проверить возраст людей, используя другой объект в другом классе, по какой-то причине areThey boolean возвращает false независимо от того, что. Следующий код, который я реализовал is_Если оператор Object boolean не работает

public class main {  
    public static void main(String[] args){  
     Obj object = new Obj();  
     object.areTheyOldEnough(); 

     if(object.areTheyOldEnough() == true){ 
      System.out.println("They are old enough!"); 
     }else{ 
      System.out.println("They are not old enough!"); 
     } 
    } 
} 

public class Obj { 
    private int age = 15; 
    private boolean areThey; 

    public boolean areTheyOldEnough() { 
     if (age > 12) { 
      boolean areThey = true; 
     } 
     return areThey;  
    } 
} 
+0

Вызов экземпляра класса 'Object' - не очень хорошая идея. Вы должны ознакомиться с соглашениями об именах. –

+0

Независимо от вашего вопроса вы должны знать, что: имена классов должны быть существительными в смешанном случае с первой буквой каждого внутреннего слова, заглавного. (http://www.oracle.com/technetwork/java/codeconventions-135099.html). Я хочу сказать, что вы должны определить свой класс: public class Obj – limonik

+0

Помимо этого 'if (booleanMethod() == true)' также является плохой практикой. Вы видите, 'if (areTheyOldEnough())' еще проще читать! – GhostCat

ответ

4

Ваша проблема называется затенения; здесь:

Это самая внутренняя декларация:

if (age > 12) { 
    boolean areThey = true; 

Это просто неправильно, что следует читать:

areThey = true; 

вместо этого. Дело в том, что вы объявляете переменную этого имени и указываете значение true. Но эта переменная исчезает в воздухе, когда этот if-блок «остается» ... и возвращается значение полеareThey в вашем классе obj. И тот все еще имеет начальное значение по умолчанию false.

И кроме того: Именование - настоящая проблема в вашем коде. Использовать имена, которые A) соответствуют стандартам java-кодирования; поэтому имена классов запускают UpperCase, например; B) средний что-то.

Другими словами: имя Объект ничего не значит (помимо создания еще одного столкновения имени с именем класса java.lang.Object). Лучше назовите это «testInstance» или что-то в этом роде - как сказано: используйте имена, которые означает что-то.

0

У вас есть две логические переменные с одним и тем же именем - одна локальная переменная, которую вы устанавливаете в своем методе (внутри блока if), а другая - переменная экземпляра, которую вы возвращаете.

Вам не нужно какое-либо логические переменный, просто написать:

public boolean areTheyOldEnough() { 
    return age > 12; 
} 
0

вас смешали обзорность из поля и локальных переменной

public class obj { 

public int age = 15; 
public boolean areThey; //initialized to false as default value for boolean 

public boolean areTheyOldEnough() { 
    if (age > 12) { 
     boolean areThey = true; //create new local variable with the same name as field, 
           // but visible just in scope of if-block 
    } 
    return areThey; // return value from field 
} 
0

исправить код следующим образом:

public class main { 

public static void main(String[] args){ 

    obj Object = new obj(); 

    if(obj.areTheyOldEnough()){ 
     System.out.println("They are old enough!"); 
    } else{ 
     System.out.println("They are not old enough!"); 
    } 
} 

и ваш класс obj будет:

public class obj { 
public int age = 15; 
// it is not required, but if you need for other methods, 
// you can define it 
public boolean areThey; 

public boolean areTheyOldEnough() { 
    return age > 12; 
    // or if you need set variable areThey, so use following codes 
    /* 
     areThey = age > 12; 
     return areThey; 
    */ 
}