2013-10-16 34 views
0

我幾乎是一個編程noob,但我已經研究過所有的地方,找不到答案。即時通訊使用Eclipse和每一次我運行我的程序時,它說:ArrayIndexOutOfBoundsException當循環

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 
    at computer.guess(game1player2.java:24) 
    at game1player2.main(game1player2.java:39) 

這裏是我的代碼:

import java.util.Scanner; 

class computer{ 

    int g = 0; 
    int[] compguess = new int[g]; 


    void guess(){ 

     int rand; 
     while(0 < 1){ 

      int i; 
      rand = (int) Math.ceil(Math.random()*10); 
      for (i = 1; i < compguess.length; i++){ 

       if(rand == compguess[i]){ 
        break; 
       } 
      } 
      if(i > compguess.length){ 
       g++; 
       rand = compguess[g]; 
       System.out.println(compguess[compguess.length]); 
      } 
     } 
    } 
} 

public class game1player2 { 

    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 

     computer computer1 = new computer(); 
     for(int a = 0; a < 2; a++){ 
      computer1.guess(); 
      for(int n = 0; n <= computer1.compguess.length; n++) 
       System.out.println(computer1.compguess[n]); 
      } 
    { 
     input.close(); 
    } 
    } 
} 

我現在真的很迷茫,我試圖讓計算機生成一個隨機數1 10,但是如果它已經在數組中生成另一個。

+0

'n <= computer1.compguess.length'應改爲'<'。 '<='表示你正在做0-> n,這實際上是n + 1次迭代。例如0,1,2,3,4是一個5項數組,但實際上你迭代了0,1,2,3,4,5,最後嘗試訪問數組末尾的1個元素。 –

+0

爲什麼'while(true)'而不是'while(0 <1)'? –

回答

1
  1. 既然你初始化g爲零,你的陣列compguess有一個長度爲零。接下來,當你進入你的循環分配1〜i,這將讓你進入在猜測,這將嘗試訪問元素compguess[1]結束時,如果條件但這不能存在,因爲數組大小爲0。

  2. 如果您不糾正以下情況,將會遇到問題。

    變化:for(int n = 0; n <= computer1.compguess.length; n++)

    要:for(int n = 0; n < computer1.compguess.length; n++)

    如果你的數組長度爲8然後數組中的最後一個項目將是指數7,但<=告訴環路搶項目索引8

3
int g = 0; 
int[] compguess = new int[g]; 

你的數組的大小爲0,所以你有沒有合法的條目。

+0

也,你的g ++是無用的,因爲在運行時不能調整數組大小。這意味着您的陣列保持大小0並永遠不會更改 – Killerpixler

0

你compguess具有爲0的長度,並且你開始您的for循環,其中i = 1,至極已經大於0

+0

當然,但這意味着該代碼的該部分中沒有數組索引。 –

0

compguess是零長度的數組。如果您嘗試對其進行索引,則將脫離陣列並因此退出陣列,因此ArrayIndexOutOfBoundsException

0

如果您的目的是讓陣列變長並在其末尾添加新項目,則不能這樣做。我猜,這就是你想在這裏做的:

rand = compguess[g]; 

首先,如果語言沒有允許的話,你想把它寫的其他方式:

compguess[g] = rand; 

因爲你試圖把一個價值數組的一個新的元素,而不是從陣列讀取。這實際上可以用某些語言(JavaScript,Perl和其他語言)工作。然而,在Java中,當您使用類似於new int[]的東西創建數組對象時,大小是固定的。你不能讓它變長或變短。

你可能想使用ArrayList,它可以讓您創建一個數組,你可以做更長時間。請參閱tutorial

相關問題