0

我对编程几乎是个菜鸟,但我到处研究过,找不到答案。我正在使用 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,但如果它已经在数组中,则会生成另一个。

4

5 回答 5

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

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

于 2013-10-16T20:07:22.387 回答
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那么数组中的最后一项将是 index 7,但<=告诉循环获取项 index 8

于 2013-10-16T20:07:09.900 回答
0

您的 compguess 的长度为 0,并且您以 i = 1 开始 for 循环,这已经大于 0。

于 2013-10-16T20:07:30.667 回答
0

compguess是一个长度为零的数组。如果你试图索引它,你会掉出数组,因此ArrayIndexOutOfBoundsException

于 2013-10-16T20:08:25.983 回答
0

如果您的意图是使数组更长并在其末尾添加一个新项目,则不能这样做。我猜这就是您在这里尝试做的事情:

rand = compguess[g]; 

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

compguess[g] = rand;

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

您可能想要使用ArrayList,它确实可以让您创建一个可以延长的数组。请参阅本教程

于 2013-10-16T20:47:29.863 回答