我在Java中创建一个简单的数组时遇到了一些麻烦,每次循环时都会生成一个随机数。我的代码如下:
public class Q1 {
public static void main(String[] args) {
Scanner listScan = new Scanner(System.in);
System.out.println("Size of list to sort?");
int j = listScan.nextInt();
int listArray[] = new int[j];
for (int i = 0; i <= j; i++){
listArray[i] = (int)(Math.random() * 100 +1);
}
System.out.println(listArray);
}
}
但是代码给了我这个:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Lab3.Q1.main(Q1.java:18)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
答案 0 :(得分:2)
int listArray[] = new int[j]; // Assume j =5. creates array of 5 elements.
for (int i = 0; i <= j; i++){ // iterates from index 0 to 5 i.e, 6 elements . change it to i<j. it will work.
listArray[i] = (int)(Math.random() * 100 +1);
}
注意:当您尝试访问大于数组长度的索引时,会得到ArrayIndexOutOfBoundsException
。
答案 1 :(得分:1)
你的指数太高了。使用
for (int i = 0; i < j; i++)
答案 2 :(得分:1)
看一下代码的这一部分:
int listArray[] = new int[j];
for (int i = 0; i <= j; i++){
listArray[i] = (int)(Math.random() * 100 +1);
}
应该改为:
int listArray[] = new int[j];
for (int i = 0; i < j; i++){
listArray[i] = (int)(Math.random() * 100 +1);
}
注意<=
如何更改为<
:
for (int i = 0; i <= j; i++){
VS
for (int i = 0; i < j; i++){
对于几乎所有编码,包括java
,计数从0
开始。因此,您通常会说5
,在编码中您会说4
。
我们假设数组的长度为3
,意味着它包含0, 1, and 2
。所以,当这样做时:
for (int i = 0; i <= j; i++){
j
=数组的长度,所以3。
for (int i = 0; i <= 3; i++){
现在,它将循环抛出数字0, 1, 2, and 3
。但是,我们的数组不包含3,它只包含0, 1, and 2
。所以,如果我们这样做:
for (int i = 0; i < j; i++){
j
= 3
for (int i = 0; i < 3; i++){
使用这个新代码,它会循环抛出0, 1, and 2
,与我们的数组0, 1, and 2
的大小相同。
答案 3 :(得分:1)
两个问题:
你的for循环进入了1个索引位置太远了。您不能将实际j
值包含为索引位置。最后一个索引位置比长度小1。所以这样做:
for (int i = 0; i < j; i++) {
您未正确打印阵列。你不能打印这样的数组:System.out.println(array);
所以你有两个选择:
System.out.println( Arrays.toString(listArray) );
// or iterate through the array
for (int i = 0; i < listArray.length; i++) {
System.out.println(listArray[i]);
}
答案 4 :(得分:0)
问题是,Java中的数组是一个静态结构,并且在添加元素时不会直接更改它的大小。您可以使用其他类型的对象,更适合作为ArrayList。