2011-11-22 198 views
2
public void PlayforMe() 
{ 
    for (int i=game.size()-1;i>=1;i--) 
    { 
     Card a = game.get(i); 
     Card b = game.get(i-1); 
     if (a.getSuit().equals(b.getSuit()) | (a.getCardNum().equals(b.getCardNum()))) 
     { 
      game.remove(b); 
      break; 
     } 
    } 

    for (int j=game.size()-1;j>=3;j--) 
    { 
     Card c = game.get(j); 
     Card d = game.get(j-3); 
     if (c.getSuit().equals(d.getSuit()) | (c.getCardNum().equals(d.getCardNum()))) 
     { 
      game.set(j-3,game.get(j)); 
      game.remove(j); 
      break; 
     } 
    } 
} 

我已經爲我在Java代碼中製作的單人紙牌遊戲編寫了這段Java代碼。我對這門語言(以及一般的編程)非常陌生。我有一個arrayList爲我的套牌和arrayList爲我的'遊戲'。在這種方法/移動中,我擁有它,所以它會發現最接近髮卡末尾的卡片,如果卡片或卡片號碼相同,則直接在卡片前面與卡片「交換」。如何實現具有兩個循環的條件

如果這個舉動並不是卡片發出的選項,那麼我需要它通過第二個循環,找到最接近發牌結束的卡片,然後用卡片[3]之前的卡片「交換」如果西裝或卡號是相同的。

他們單獨工作,但我不能得到一個條件工作(例如我已經嘗試過的if語句),將通過第一個循環,如果它沒有成功地刪除一張卡,它將通過第二個循環。

該方法應該只執行一個步驟,如果滿足條件,則優先將卡移動到卡上(之前)。我可以做到這一點,所以它會經歷兩個循環(即把這段代碼放到兩個方法中,並從我的菜單中調用它們),但是我需要它執行第一個循環,並且只有在第一個循環結束時才執行第二個循環不成功(即卡b不刪除/ game.remove(b);不叫)

如果任何人有任何建議,我會感激:)

回答

0

你想要把Boolean finished = false;在功能開始,然後finished = true完成。然後把if (finished) { ... }放在第二個循環中。

或者在完成時在第一個循環中輸入return。這將返回你的函數並且不再執行任何代碼。雖然有些人認爲這種不好的風格。

+0

謝謝,那個工作出色^^ – DanMc

0

如果第一個for環路成功,return而不是break ing。

+0

小心*早日返回狂熱分子*!他們會爲你而來! – trojanfoe

+0

@trojanfoe:我想我倒在另一個陣營。你碰巧有一個參考文件解釋了爲什麼早期「返回」是一件壞事? – John

+1

@John:不要誤解我的意思 - 我不在他們的陣營,並且經常使用早期的回報。我只是從這裏的經驗中得知,一些新手編碼人員會爲最小的違規行爲倒解答。 – trojanfoe