2015-10-21 184 views
0

這是我的方法,顯示兩個數字是否相等。最後一條if語句是,如果所有數字都是相同的,但是當我運行這個時,它會打印出「兩並列第二」和「全部並列第一」。我如何做到這一點,如果所有的數字是相同的,它只會輸出「所有並列第一」?如何解決我的方法來輸出一個答案?

public static void overlap(double a, double b, double c){ 
    if (a==b) { 
     System.out.println("Two tied for second"); 
     } 
    if (c==b) { 
      System.out.println("Two tied for second"); 
     } 
    if (c==a) { 
      System.out.println("Two tied for second"); 
     } 
    if(a==b && b==c && a==c) { 
     System.out.println("All tied for first"); 
     } 
} 

回答

0

在進入其他條件語句之前,先將該語句放在開頭。並確保使用ifif else陳述。

+1

您可能還想嘗試使用else if語句。 – chasep255

+0

對不起,使用我的手機鍵入答案,所以沒有看到完整的問題。再次閱讀後更新它。 –

1

嘗試使用else if

而且把最後一個條件,這否則將是真正的要早得多,第一:

if(a==b && b==c && a==c) { 
    System.out.println("All tied for first"); 
} 
else if (a==b) { 
    System.out.println("Two tied for second"); 
} 
else if (c==b) { 
    System.out.println("Two tied for second"); 
} 
else if (c==a) { 
    System.out.println("Two tied for second"); 
} 
+0

當你在這裏時,考慮簡化第一個表達式。並且考慮一下比較雙打。 爲什麼a和b如果平等的話會並列第二?爲什麼不首先並列? –

0

像其他帖子說,如果也是一個不錯的主意使用人,但要記住的是,當滿足如果一個條件是另一個條件,它不會再進一步​​。所以如果它發現a == b,它不會再去檢查c == b或c == a

怎麼樣?

public static void overlap(double a, double b, double c) { 
    if(a==b && b==c && a==c) { 
     System.out.println("a==b==c"); 
    } 
    else { 
     if (a==b) { 
      System.out.println("a==b"); 
     } 
     if (c==b) { 
      System.out.println("c==b"); 
     } 
     if (c==a) { 
      System.out.println("c==a"); 
     } 
    } 
} 
0

您有兩個問題。

第一個是'if'語句的評估順序。 這聽起來像你想先評估最後一個。

第二個問題是您將要打印匹配的第一個「if」語句的結果,並跳過其餘部分。

有很多方法可以做到這一點。 一種流行的方法是擁有if/else if語句鏈,但我發現它的可讀性低於我喜歡的。所以我使用下面的,有些非標準的方法:

do { 
    if(a==b && b==c && a==c) { 
    System.out.println("All tied for first"); 
    break; 
    } 

    if (a==b) { 
    System.out.println("Two tied for second"); 
    break; 
    } 

    if (c==b) { 
    System.out.println("Two tied for second"); 
    break; 
    } 

    if (c==a) { 
    System.out.println("Two tied for second"); 
    break; 
    } 

} while(false); 
2

這將是更清潔。

public static void overlap(double a, double b, double c) { 

    if (a == b && b == c && a == c) { 
     System.out.println("All tied for first"); 
    } 
    else if (a == b || c == b || c == a) { 
     System.out.println("Two tied for second"); 
    } 
} 
+2

您只需要測試'a == b && b == c'。這是傳遞性財產。 –

0

您的代碼的問題是它獨立評估每個if語句。因此,如果您未能指定else語句,則每個if語句將在執行TRUE時執行,無論語句的順序如何。

沿着相同的路線Moishe(也許更直觀地爲您的目的),你也可以組織你的代碼像這樣:

public static void overlap(double a, double b, double c){ 
    if(a==b && b==c && a==c) { 
     System.out.println("All tied for first"); 
     } 
    } 
    else { 
      if (a==b) { 
       System.out.println("Two tied for second"); 
      } 
      if (c==b) { 
       System.out.println("Two tied for second"); 
      } 
      if (c==a) { 
       System.out.println("Two tied for second"); 
      } 
    } 
} 

但是,如果你正在尋找精簡事情有點,你可能會考慮重組事項以防止過度比較:

public static void overlap(double a, double b, double c){ 
    if (a==b) { 
     if(b==c && a==c) { 
      System.out.println("All tied for first"); 
      } 
     else { 
      System.out.println("Two tied for second"); 
      } 
     } 
    else if (c==b) { 
      System.out.println("Two tied for second"); 
     } 
    else if (c==a) { 
      System.out.println("Two tied for second"); 
     } 
} 
相關問題