for循环for java中的二维数组

时间:2012-06-26 04:51:38

标签: java

我想从文件中读取数字行。代码如下,但IDE显示NullPointerException运行时异常。不确定我做错了什么。

//reading the contents of the file into an array
public static void readAndStoreNumbers() {
    //initialising the new object
    arr = new int[15][]; 

    try{
        //create file reader
        File f = new File("E:\\Eclipse Projects\\triangle.txt");
        BufferedReader br = new BufferedReader(new FileReader(f));

        //read from file
        String nums;
        int index = 0;
        while((nums = br.readLine()) != null) {
            String[] numbers = nums.split(" ");

            //store the numbers into 'arr' after converting into integers
            for(int i=0; i<arr[index].length; i++) {
                arr[index][i] = Integer.parseInt(numbers[i]);
            }
            index++;
        }
    }
    catch(IOException e) {
        e.printStackTrace();
    }
}

5 个答案:

答案 0 :(得分:5)

arr的第二个维度未初始化,而您正在调用

arr[index].length

答案 1 :(得分:1)

你可能会因为两个原因而遇到NPEX。

  1. 您没有完成arr的定义 - 您在代码中明确表示arrint arr[][];

  2. 即使您有上述内容,也不会为第二个阵列预留空间。你现在拥有的是jagged array;你可以在第二个数组中拥有你想要的第二维中任何长度的元素。

    我对您的代码进行的唯一修改就是以下一行:

    arr[index] = new int[numbers.length];
    

    ...将元素拉入numbers之后,进入循环之前。

答案 2 :(得分:0)

我认为你应该使用StringBuffer ..

//reading the contents of the file into an array
    public static void readAndStoreNumbers() {
        //initialising the StringBuffer 
       StringBuffer sb = new StringBuffer(); 

        try{
            //create file reader
            File f = new File("E:\\Eclipse Projects\\triangle.txt");
            BufferedReader br = new BufferedReader(new FileReader(f));

            //read from file
            String nums;
            int index = 0;
            while((nums = br.readLine()) != null) {
                String[] numbers = nums.split(" ");

                //store the numbers into 'arr' after converting into integers
                for(int i=0; i<arr[index].length; i++) {
                    sb.append(Integer.parseInt(numbers[i])).append("\n");
                }
            }
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }

答案 3 :(得分:0)

你需要改变 -

for(int i=0; i<arr[index].length; i++) {

arr[index] = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {

答案 4 :(得分:0)

Java没有真正的多维数组。您正在使用的实际上是一个int数组数组:new int[n][]实际上创建了一个数组,其中包含n类型int[]对象的空间。

因此,您必须分别初始化每个int数组。从你从未在程序中的任何地方实际指定第二维的长度这一事实就可以看出这一点。