2016-01-31 23 views
0

在下面的代碼中,我得到ArrayIndexOutOfBoundsException。我對Java不熟悉的線索並沒有讓它超出界限。我調試這個代碼,輸入4個條目後終止。獲取ArrayIndexOutOfBoundsException,數組大小是動態確定的

 String[] suit = {"Clubs", "Diamonds", "Hearts", "Spades"}; 
     String[] rank = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"}; 
     String[] deck = new String[suit.length * rank.length]; 

     int i = (int)(Math.random()*rank.length); 
     int j = (int)(Math.random()*suit.length); 

     System.out.println(rank[i]+" of "+suit[j]);   

     for(int k=0; k<suit.length; k++){ 
      for(int l=0; l<rank.length; l++){ 
       //on the following line. 
       deck[rank.length*k + l] = rank[k]+ " of "+suit[l]; 
      } 
     } 

     for(String s : deck){ 
      System.out.println(s); 
     } 

回答

1

我敢肯定你有這些變量混合起來

deck[rank.length*k + l] = rank[k]+ " of "+suit[l]; 

應該

deck[rank.length*k + l] = rank[l]+ " of "+suit[k]; 
+0

它工作正常。你能解釋一下嗎?只是爲了擺脫例外。 Abdelhak的答案也使它正確。他的解釋是有道理的,但不是輸出。您的解決方案提供正確的輸出。 – LetMeCodeYou

+1

你正在使用'k'作爲訴訟指數(你有4)和'l'作爲行列指數(有13個)。由於您在'rank'中沒有大於3的索引,最終會出現'ArrayIndexOutOfBoundsException' –

0

問題的原因是你應該使用k指數,而不是l

deck[rank.length*k + l] = rank[k]+ " of "+suit[l]; 

像這樣:

deck[rank.length*k + l] = rank[k]+ " of "+suit[k]; 

因爲rank.length>suit.length對於有西裝數組中此指數suit[4]沒有數據。