我几乎是编程的菜鸟,但我已经研究了所有地方,无法找到答案。即时通讯使用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的随机数,但如果它已经在数组中生成了另一个。
答案 0 :(得分:3)
int g = 0;
int[] compguess = new int[g];
您的数组大小为0,因此您没有有效的条目。
答案 1 :(得分:1)
由于您将g
初始化为零,因此数组compguess
的长度为零。接下来,当您输入for循环时,将1分配给i
,这将允许您在猜测结束时输入if条件,该条件将尝试访问元素compguess[1]
,但这不可能存在,因为数组是大小为零。
如果您不更正以下内容,则会遇到问题。
更改: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。