2012-10-10 112 views
0

我不断得到的行 winVals[i] = rand,但我不知道为什么。我不断收到ArrayIndexOutOfBoundsException,我不知道为什么

int valueCount = 5; 
int theLimit = 5; 
int[] winVals = new int[valueCount]; 
Random r = new Random(); 
int rand = 0; 
for(int i= 0; i < winVals.length; i++) 
{ 
    rand = r.nextInt(theLimit - 1) +1; 
    if(i == 0) 
    { 
     winVals[0] = rand; 
    } 
    else if (i > 0) 
    { 
     for (int j = 0; j < winVals.length; j++) 
     { 
      if(winVals[j] == rand) 
      { 
       i--; 
      }  
      else 
      { 
       winVals[i] = rand; 
      } 
     } 
    } 
} 
for(int i=0; i < valueCount; i++) 
{ 
    System.out.println(winVals[i]); 
} 
+3

您是否尝试过在那一刻打印出“i”的值? – DNA

+0

减少循环体内的for循环计数器。通常不是一个好主意...... – Jagger

回答

6
for (int j = 0; j < winVals.length; j++) 
{ 
    if(winVals[j] == rand) 
     i--; 
    else 
    { 
     winVals[i] = rand; 
    } 
} 

在本节你通过的j值循环和减少i,但你没有打扰检查i仍然有效。如果i是1并且你减少了两次呢?

+0

另外,在循环中我不会改变正在增加的变量的值;虽然它可能是合法的,但是其他程序员不太习惯和难以注意,我会在这些情况下使用“while”(恕我直言) – SJuan76

1

你递减循环内的循环计数器:

if(winVals[j] == rand) 
    i--; 

导致出界。

0

我认为这条线是问题所在。

if(winVals[j] == rand) 
    i--; 

认为如果这条线之前,I = 0和j = 0,并且在此条件变为真,i变为1,-1

0

只是测试它,因为上面提到的其中索引递减,这在无限循环中运行。

相关问题