循环时ArrayIndexOutOfBoundsException

时间:2013-10-16 20:05:14

标签: java

我几乎是编程的菜鸟,但我已经研究了所有地方,无法找到答案。即时通讯使用eclipse,每次运行程序时都会说:

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的随机数,但如果它已经在数组中生成了另一个。

5 个答案:

答案 0 :(得分:3)

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

您的数组大小为0,因此您没有有效的条目。

答案 1 :(得分:1)

  1. 由于您将g初始化为零,因此数组compguess的长度为零。接下来,当您输入for循环时,将1分配给i,这将允许您在猜测结束时输入if条件,该条件将尝试访问元素compguess[1],但这不可能存在,因为数组是大小为零。

  2. 如果您不更正以下内容,则会遇到问题。

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

    收件人:for(int n = 0; n < computer1.compguess.length; n++)

    如果您的数组长度为8,那么数组中的最后一项将是索引7,但<=告诉循环获取项目索引8。< / p>

答案 2 :(得分:0)

你的compguess长度为0,你开始你的for循环,i = 1,已经大于0。

答案 3 :(得分:0)

compguess是一个零长度数组。如果您尝试对其进行索引,那么您将脱离数组,因此ArrayIndexOutOfBoundsException

答案 4 :(得分:0)

如果您的目的是延长阵列并在其末尾添加新项目,则无法执行此操作。我猜这就是你在这里要做的事情:

rand = compguess[g]; 

首先,如果语言 允许它,你想用另一种方式写它:

compguess[g] = rand;

因为你试图将值放入数组的新元素,而不是从数组中读取。这实际上适用于某些语言(JavaScript,Perl,其他)。但是,在Java中,当您使用new int[]之类的内容创建数组对象时,大小是固定的。你不能让它更长或更短。

您可能想要使用ArrayList,这可以让您创建一个可以延长的数组。请参阅此tutorial