2013-08-03 105 views
0

這個程序是一個簡單的紙牌遊戲,我掛在一個複雜的循環。這張「火」牌需要檢查它的2個鄰居遊戲板插槽,看看它是否被另一張卡佔用,如果是,它是否是一張可以影響的卡。有了這個循環,它需要一次運行成功,或兩次失敗。我想我已經認識到了下面的代碼,但是當它運行循環失敗時,程序崩潰而沒有錯誤。讓我知道你的想法,謝謝。複雜的循環幫助。 Java

此代碼只是方法,主要不包括在內。

public static void fireAction(String slotSelection) 
{ 
    switch (slotSelection) 
    { 
     case "A1": 
      { 
       boolean x = true; 
       boolean y = true; 
       boolean end = false; 
       while ((y == true && x == true) || (end == false)) 
       { 
        int burn = roll.nextInt(2); 
        switch (burn) 
        { 
         case (0): 
          if ((newBoard.getSlotA2() == "fire") | (newBoard.getSlotA2() == "wind")){ 
           newBoard.setSlotA2("BURNED"); 
           end = true;} 
          else 
           x = false; 
          break; 
         case (1): 
          if ((newBoard.getSlotB1() == "fire") | (newBoard.getSlotB1() == "wind")){ 
           newBoard.setSlotB1("BURNED"); 
           end = true;} 
          else 
           y = false; 
          break; 
        }//end switch 
       }//end while 
      }//end case A1 
      break; 
+0

是故意的按位「|」嗎? – CBIII

+0

可能的重複[如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – jlordo

+0

是的,我必須使用它們錯誤如果你問。我的印象是,這意味着只有其中一個表達式需要評估爲true才能成功。 – Sevren

回答

1

嘗試使用& &,而不是|| :

while ((y == true && x == true) && (end == false)) 

,也或許你應該使用||而不是|在下面的代碼中:

if ((newBoard.getSlotA2() == "fire") | (newBoard.getSlotA2() == "wind")) 
+2

閱讀[我如何比較Java中的字符串?](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – jlordo

+0

好吧,工作,所有我感到困惑至於爲什麼。我認爲使用「或」操作符會使它只有一個條件需要滿足,而不是全部。我很新,整個「||」和「&&」相當混亂。無論如何,謝謝! – Sevren

+0

'&&'和'||'是邏輯運算符'|'和'&'是按位運算符。不要忘記接受這個答案,以便用戶獲得代表。 – CBIII

0

您可以使用for循環而不是while來防止循環無限。另外,將end設置爲true不一定會結束循環,因爲x和y仍然可以爲真。更好的條件是:

while((x && y) && (!end)){ 
+0

你可以交替使用for和while循環。 – CBIII

+0

我曾考慮過使用for循環,但隨機數發生器每次通過循環時都有相同的數字滾動。 – Sevren

+0

當((x && y)&&(!end))在循環結束之前需要滿足所有三個條件時,會不會這樣做? – Sevren