2015-05-09 271 views
0

我對Java很新,我正在做一個任務。我需要通過一些卡片,確定它們是否都面朝上,如果他們都是,然後返回一個祝賀信息。在for語句中使用if語句

我正在研究通過卡循環的代碼,以確定它們是否都面朝上。目前,代碼在返回「true」之前似乎沒有檢查所有卡片。

是否有可能在for循環中使用if語句,或者我是否全都做錯了?

public boolean checkAllMatchesFound() {  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++) { 
     if ((cards[i].isFacingUp()) == true); 
     return true; 
    } 

    return false; 
} 
+1

你的算法有點不合適,試着通過多一點思考你的邏輯。 – mcraen

+0

此方法測試是否至少有一張牌面朝上。如果這是作者的意圖,那可能是完全沒問題的。 –

回答

0

你有兩個問題:

  1. 分號後,如果其java會當作空語句,因此不會檢查條件。
  2. 即使在那之後,如果發現任何卡朝上,你將返回true,這與你所需要的矛盾,因此你的邏輯應該是:

    public boolean checkAllMatchesFound() {  
        for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
          if (!cards[i].isFacingUp()) 
           return false; 
        } 
        return true; 
    } 
    
+0

謝謝。完美工作。 – SweetMello7

0

你在if語句後面有一個分號。刪除它&它會工作。

public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
     if (cards[i].isFacingUp()) 
     return true; 
    } 
    return false; 
} 
+0

哦!我刪除了分號,但在所有卡被檢查之前它仍然返回true ... – SweetMello7

+0

您仍然會看到問題:「現在,代碼在返回」true「之前似乎沒有檢查所有卡, 「。 @ SweetMello7看到我的回答 – SMA

+0

這裏的算法是不正確的,這將返回真正的是/任何/卡面朝上,不是如果他們都是 – tddmonkey

1

在這些情況下,您通常使用反邏輯。在你的情況下,只要卡片朝上,沒有檢查其他卡片,該方法就會返回true。因此:

public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 
     if (!cards[i].isFacingUp()) 
     return false; 
    } 
    return true; 
} 
+0

這看起來像適當的算法,但是,我建議原在將這樣的問題發佈到Stack之前,這個問題的海報工作起來有點困難。我不是說這是一種侮辱,而是因爲他們說......'教一個男人去釣魚......' – mcraen

0

這是絕對有可能的。你的問題是,當你發現一張面朝上的卡片返回true。迭代所有卡後必須返回true/false。你可能不喜歡這一點 -

boolean isAllFacingUP = true; 
public boolean checkAllMatchesFound() 
{  
    for (int i=0; i<MatchingGame.NUMBER_OF_CARDS; i++){ 

     if (!cards[i].isFacingUp()){ 
     isAllFacingUp = false; 
     } 

} 
    return isAllFacingUP; 
} 
0

如果你可以使用Java 8,那麼你可以利用流爲你做所有這些。下面將返回你想要

Arrays.stream(cards).allMatch(card -> card.isFaceUp()); 

或者有什麼使用方法參考:

Arrays.stream(cards).allMatch(Card::isFaceUp); 
0

你打開,如果loop.within您返回真中的其他部分關閉返回FALSE或否則你只需分配任何值的FacingUp()方法。