具有用户输入和随机数的2D阵列

时间:2015-09-20 23:36:31

标签: java arrays

我正在尝试生成一个程序,询问用户数字“n”并显示一个2 x n数组。 E.g:

1 2 3 4 5(用户输入)

5 8 2 1 5(随机数)

我看不到让我的代码工作。这是我的代码:

import java.util.Scanner;


public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {



        Scanner input = new Scanner(System.in);
        System.out.print("Enter number of exits: ");
        int n = input.nextInt();

        int [][] A = new int[2][n];
        for (int i =0; i <= A[n].length; i++){

            A[i][n]= (int)(Math.random()*10);
    }
        System.out.println(A[2][n]);
        System.out.print("Distance between exit i and exit j is: " + distance());
    }



    public static int distance(){
        Scanner input = new Scanner(System.in);

        System.out.print("Please enter exit i: ");
        int i = input.nextInt();
        System.out.print("Please enter exit j: ");
        int j = input.nextInt();
        return i + j;
    }
}

我收到此错误

  

“线程中的异常”主“java.lang.ArrayIndexOutOfBoundsException:   5"

我该如何解决? 我认为我的Math.random是错误的。你们可以帮我一些建议,或者我在哪里做错了? 感谢。

1 个答案:

答案 0 :(得分:0)

你的所有错误都在你的for循环之内和之后:

for (int i =0; i <= A[n].length; i++){

        A[i][n]= (int)(Math.random()*10);
}

如果n = 5,则A [5] .length不存在,因为数组的第一维仅存在于0和1之间。[2]为2个int基元保留空间,第一个维度为索引0和最后一个是索引1.即使改变了,你的for循环声明的i变量也增加到1以上,因此JVM将抛出一个ArrayIndexOutOfBoundsException。

当声明具有尺寸[2] [n]的数组时,(给定n是整数,将由用户通过扫描仪提供),您无法访问 arrayReference [2] [ X]

阵列基于 0索引结构 ......

请考虑以下事项:

int [] [] A = new int [2] [2];

您只能访问A [0] [0],A [0] [1],A [1] [0]&amp; A [1] [1]

不能访问A [2] [0],A [2] [1]或A [2] [2]。

以下是您需要做的事情:

 //A.length will give you the length of the first dimension (2)
 for(int i=0; i<A.length; i++){
            for(int j=0; j<n; j++){
                A[i][j] = (int) (Math.random()*10);
            }
        }
    }
 System.out.println(A[1][n-1]);
 System.out.print("Distance between exit i and exit j is: " + distance());