2014-03-05 26 views
1

因此這裏的前提是檢查一個包含五個「卡」的字符串數組,以查看給出的是什麼類型的手。手的類型是一個int,其中較高的數字是更好的牌。這個代碼特別segement不是我寫的,而是由一個朋友,誰是有麻煩,我不能完全找到問題Java語句執行除了變量變量

int checkHand(String[][] Hand) { 
    boolean check = true; 
    for(int i = 0; i < 4; i++) { 
     if(!Hand[i][1].equals(Hand[i+1][1])) 
      check = false; 
    } 

    //check pair starts 
    for(int i = 0; i < 5; i++) { 
     for(int n = i + 1; n < 5; n++) { 

      if(Hand[i][0].equals(Hand[n][0])) { 
       BestCard = 1;//###OUTPUTS 1 FOR A PAIR### 
       temp = Hand[0]; 
       Hand[0] = Hand[i]; 
       Hand[i] = temp; 
       temp = Hand[1]; 
       Hand[1] = Hand[n]; 
       Hand[n] = temp; 
       //check three of a kind starts 
       for(int p = n + 1; p < 5; p++) { 
        if(Hand[i][0].equals(Hand[p][0])) { 
         temp = Hand[2]; 
         Hand[2] = Hand[p]; 
         Hand[p] = temp; 
         BestCard = 3; //Problem starts here- Output 3 for Three of a Kind 

         if(Hand[3][0].equals(Hand[4][0])) 
          BestCard = 6;//###OUTPUTS A 6 FOR A FULL HOUSE### 
         else if(Hand[2][0].equals(Hand[3][0])) { 
          BestCard = 7; 
         } 
         else if(Hand[2][0].equals(Hand[4][0])) { 
          temp = Hand[3]; 
          Hand[3] = Hand[4]; 
          Hand[4] = temp; 
          BestCard = 7;//###OUTPUTS A 7 FOR A FOUR OF A KIND### 
         } 
        } 
       } 
      } 
     } 
    } 
    if(check && BestCard<4) 
     BestCard = 5;//###OUTPUTS 5 FOR A FLUSH### 
    else if(check && BestCard == 4) 
     BestCard = 8;//###OUTPUTS 8 FOR A STRAIGHT FLUSH### 

    return BestCard; 
} 

在運行此(而且有更多的它,但是這是我相信是問題所在),它可以決定所述的手是否是一對或齊平。除此之外,它不會返回正確的數字。奇怪的是,聲明中的其他所有內容都會運行 - 如果有三種被強制但未被排序,則該手將被重新排序以保持正確。同樣的情況發生在四種類型中。評論是在BestCard的價值發生變化的地方給出的。 int BestCard和String [] temp已經初始化。

回答

0

我發現你的錯誤。 比方說你的手是3 2 k 3 Q

你我= 0,N = 1和P = 2
通過沒有初始循環真的發生,
因此P經過
和第二經過,當p = 2。你遇到問題
第一行是
如果(手i ==手p) 在這一點上手i = 3 AND手p = 3 但你沒有3一種你只有一對。
一旦p for循環結束並且n = 2,程序將再次發出此錯誤,因爲那麼p將再次從3開始,並返回您有3個類型,當您真的只有一對時。

我希望這會有所幫助。

我會建議讓他們各自爲循環,而不是試圖一次完成所有事情,不要混淆,更容易做到當你更新Java時。

PS你應該改變你的bestcard值,這樣你就可以通過高卡贏得比賽,如果沒有一對。