需要我的代码帮助,当我尝试运行它时,它给了我arrayindexoutofbounds 0异常,它指向“ results [counter] = random;”行,以及我在正确打印之前写的system.out.println行。计数器为0,numToss为5,随机值为0(或1)”

   public int[] results = new int[numToss];

   public void fillArray() {
      int counter = 0;
      //int[] results = new int[numToss];
      int random;
      while (counter < (numToss)) {
        if (Math.random() > 0.5) random = 1;
        else random = 0;
        System.out.println("Counter is " + counter + " and numToss is " + numToss + " and random is " + random);
        results[counter]=random;
        counter++;
      }
   }

最佳答案

arrayindexoutofbounds 0异常


这只能说明一件事,即结果数组的大小为0。

请注意,当调用fillArray方法时,您正在测试numtoss的值,它为您提供了一个非零值,但这并不重要。不,重要的是在创建结果数组时其值,而在创建结果数组时numToss可能为零。

解决方案:创建结果数组时,请确保numToss具有有意义的非零值。



编辑
也许您想要分配但不重新声明变量来执行此操作:

public void fillArray() {
   //int[] results = new int[numToss];
   results = new int[numToss];  // do not re-declare this variable!

   for (int counter = 0; counter < results.length; counter++) {
     results[counter] = (Math.random() > 0.5) ? 1 : 0;
   }
}


或者,您可以重新声明变量,并让您的方法返回创建的int数组。

public int[] fillArray() {
   int[] results = new int[numToss];

   for (int counter = 0; counter < results.length; counter++) {
     results[counter] = (Math.random() > 0.5) ? 1 : 0;
   }
   return results;
}


注意:这是为什么在遍历数组时应使用for循环的原因之一,因为这完全避免了ArrayIndexOutOfBoundsExceptions。

另外,由于您的结果数组似乎仅包含2个值,因此请考虑使其成为布尔值而不是整数的数组。

10-08 00:08