2013-08-05 20 views
5

Próbuję odświeżyć moją Javę, ponieważ minęło dużo czasu i zacząłem pracować nad rozgrzewką na CodingBat.com. (Uwaga spoilery mogą śledzić);)Wydajność przy sprawdzaniu wielu warunków za pomocą Javy

ja po prostu nie bardzo prosty jeden, który stwierdził:

podany 2 ints A i B, return true jeśli jeśli ich jest 10, lub jeśli ich suma jest 10.

makes10 (9, 10) → prawdziwego
makes10 (9, 9) → fałszywego
makes10 (1, 9) → prawda

My roztwór :

public boolean makes10(int a, int b) 
{ 
    if(a==10 || b==10) 
    return true; 
    else 
    { 
     if((a+b)==10) 
      return true; 
     else 
      return false; 
    } 
} 

Rozwiązanie podane było:

public boolean makes10(int a, int b) { 
    return (a == 10 || b == 10 || a+b == 10); 
} 

Moje pytanie brzmi: w przypadku, gdy a = 10 lub b = 10 będzie dana Solution if zakończyć i powrócić prawda czy będzie to pierwsza pełna kontrola każdy warunek, który wymagałby niepotrzebnej operacji dodawania? (tj. a + b)

Istnieje nazwa tego zachowania w C++, ale dla mojego życia nie pamiętam, co to jest.

+0

Zobacz też: http://stackoverflow.com/questions/7101992/why-do-we-we-nie-nie-nie-nie-jest-dodatkiem-dodatkowym – assylias

+1

To zachowanie nazywa się "Short Circuit". – resueman

+0

Podczas gdy druga metoda jest bardziej wydajna, zastanów się, czy Twój kod jest funkcjonalnie identyczny :) – Deactivator2

Odpowiedz

6

Stan zostanie oceniony, dopóki jedno podetap nie zostanie ocenione na true. Jeśli pierwszy warunek zostanie oceniony na true, drugi i trzeci stan nie będą oceniane. Jest to operator .

Rozważmy następujący przykład:

public class Conditions { 

    public static boolean isTrue(){ 
     System.out.println("Is True"); 
     return true; 
    } 

    public static boolean isFalse(){ 
     System.out.println("Is False"); 
     return false; 
    } 

    public static void main(String[] args) { 
     if(isFalse() || isTrue() || isTrue()){ 
      System.out.println("Condition passes"); 
     } 
    } 
} 

które wyjścia:

Is False 
Is True 
Condition passes 

Zauważ, że trzeci warunek, który wywołuje metodę isTrue() nie jest uwzględniany.

0

Każdy prawdziwy zadecyduje o wyniku wszystkich regionów najbardziej oddalonych (A || B || C || D || E)

Wszelkie nieprawdziwe zadecyduje o wyniku wszystkich AND (A & & B & & C & & D & & e)

więc w pierwszym wystąpieniem wartości wybierająca jest instrukcja.

Powiązane problemy