2017-02-11 6 views
-2

Просто интересно, какой результат этого и почему? Я понимаю, что true true будет напечатан, но я не уверен, что если (flag1 & & flag2) можно оценить? Есть ли способ, чтобы это утверждение можно было расширить, чтобы я мог понять, что это на самом деле означает? Спасибо!Java boolean statement

public class project{ 
    public static void main(String[] args) { 
     boolean flag1 = isHoopy(202); 
     boolean flag2 = isFrabjuous(202); 
     System.out.println(flag1); 
     System.out.println(flag2); 
     if (flag1 && flag2) { 
     System.out.println("ping!"); 
     } 
     if (flag1 || flag2) { 
     System.out.println("pong!"); 
     } 
     } 

     public static boolean isHoopy(int x) { 
     boolean hoopyFlag; 
     if (x%2 == 0) { 
     hoopyFlag = true; 
     } else { 
     hoopyFlag = false; 
     } 
     return hoopyFlag; 
     } 

     public static boolean isFrabjuous(int x) { 
     boolean frabjuousFlag; 
     if (x > 0) { 
     frabjuousFlag = true; 
     } else { 
     frabjuousFlag = false; 
     } 
     return frabjuousFlag; 
     } 

} 
+1

Он также должен печатать 'ping! pong! ', и вы увидите это, перейдя через код с помощью отладчика. –

+0

Что неясно о 'flag1 && flag2'? Если вы не знаете, что означает '&&', вы должны сначала начать работу с книгой/учебником для начинающих. – Eelke

+0

Я понимаю, что означает &&, однако я был просто брошен оператором if, не представляющим условие, поскольку я использую, например, если (x> 10). Теперь я вижу, что его не нужно представлять, например if (flag1 == true) и т. Д. –

ответ

0

Сочетание двух логических переменных может иметь 4 возможности (2^2 = 4):

ложные, ложный (00 в двоичной системе счисления) ложных, верно (01 в двоичной системе счисления) верно , ложные (10 в двоичной системе счисления) верно, верно (11 в двоичной системе счисления)

в вашем коде, вы имеете только одну комбинацию: истинно, истинно (11)

вы можете иметь другие случаи, например, вот так:

Для ложно, ложно (00):

flag1 = isHoopy(201); 
flag2 = isFrabjuous(-202); 

Для ложно, верно (01):

flag1 = isHoopy(201); 
flag2 = isFrabjuous(202); 

Для истинным, ложным (10):

flag1 = isHoopy(202); 
flag2 = isFrabjuous(-202); 
1

отладка код мог бы все объяснить вам. Я обеспечиваю некоторые здесь:

boolean flag1 = isHoopy(202); // flag1 = true 
boolean flag2 = isFrabjuous(202); // flag2 = true 

System.out.println(flag1); // prints: true 
System.out.println(flag2); // prints: true 

if (flag1 && flag2) { // true && true = true, so this will be evaluated 
    System.out.println("ping!"); // prints: ping! 
} 

if (flag1 || flag2) { // true || true = true, so this will be evaluated 
    System.out.println("pong!"); // prints: pong! 
} 

Улучшения:

Вы могли бы укороченные методы:

public static boolean isHoopy(int x) { 
    return (x % 2 == 0); 
} 

public static boolean isFrabjuous(int x) { 
    return (x > 0); 
} 
2

Возвращаясь к основам операторов для Java & & является оператором, который выступает за " AND ", если мы говорим о цифровом мире. В java-терминах & & является логическим оператором AND, сравнивающим только логические значения только операндов. Он принимает два операнда, указывающих логическое значение, и делает для них ленивую оценку ». & & 'выполняет только 2-й тест, если верно и первое. Принимая пример

Вы можете сравнить & & операцию размножаться в простых математике, что говорит

1 = истина

0 = ложь

1 * 1 = 1 => верно & & верно = true

1 * 0 = 0 => true & & false = false

0 * 0 = 0 => ложь & & ложь = ложь

0 * 1 = 0 => ложно & & истина = ложь

Есть ли способ это утверждение может быть расширен, так что я может понять, что это на самом деле означает?

Теперь, если (flag1 & & flag2) Java оценивает flag1 first.If он находит flag1 истинное только тогда он будет двигаться, чтобы проверить flag2, как будто он находит flag1 ложна нет никакого смысла проверять flag2, как и в любом случае результат будет ложным.