无法在Java中创建一个简单的数组

时间:2014-03-24 04:25:50

标签: java arrays

我在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)

5 个答案:

答案 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)

两个问题:

  1. 你的for循环进入了1个索引位置太远了。您不能将实际j值包含为索引位置。最后一个索引位置比长度小1。所以这样做:

    for (int i = 0; i < j; i++) {
    
  2. 您未正确打印阵列。你不能打印这样的数组: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。