簡體   English   中英

Java數組索引超出范圍異常

[英]Java- Array Index Out of Bounds Exception

我正在制作一個簡單的程序,其中我將來自文本文件的20個整數值輸入2D數組。 我通過文本文件中的前兩個值獲得了行和列的值。

據我了解, IndexOutOfBoundsException表示我的2D數組(4行5列):

  1. 該值大於數組大小-不可能,因為只有20個值。
  2. 沒有足夠的值來填充數組-^原因

我想念什么? Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0

public class Practice {

public static void main(String[] args){
    int[][] thisArray=fillArray(args[0]);
    print(thisArray,thisArray.length);
}

public static int[][] fillArray(String myFile){
    TextFileInput in= new TextFileInput(myFile);
    String r=in.readLine();//4 rows
    String c=in.readLine();//5 columns
    int row=Integer.parseInt(r);//parse from string to int
    int col=Integer.parseInt(c);
    int[][] tempArray=new int[row][col];

    for(int fillRow=0; fillRow<row;fillRow++){
        for(int fillCol=0; fillCol<col;fillCol++){
            String temp= in.readLine();
            tempArray[fillRow][fillCol]=Integer.parseInt(temp);
        }
    }
    return tempArray;//return 2D array
}

public static void print(int[][] array,int length){
    for(int r=0;r<length;r++){
        for(int c=0;c<array[r].length;c++){
            System.out.print(array[r][c]);
        }
        System.out.println();
    }
}
}

文本文件:(每行1個數字)4 5 1 3 5 7 12 34 56 78 21 44 36 77 29 87 48 77 25 65 77 2

我敢打賭,您沒有將數據文件的名稱傳遞給程序。

如果args.length == 0args[0]引發ArrayIndexOutOfBoundsException

那是您在那條線上得到該錯誤的唯一方法。

您的代碼看起來不錯,但我認為您必須先檢查row和col的值

int[][] tempArray=new int[row][col];

最有可能是錯誤所在。

更新-賓果游戲。 它的

fillArray(args[0])

您沒有向程序傳遞任何參數。

試一試

fillArray("c:\\path\\to\\my\\file.txt");

我會更像這樣:

package cruft;

import org.apache.commons.lang3.StringUtils;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * ArrayDemo
 * @author Michael
 * @link http://stackoverflow.com/questions/22029021/java-array-index-out-of-bounds-exception
 * @since 2/25/14 7:18 PM
 */
public class ArrayDemo {
    public static void main(String[] args) {
        Reader reader = null;
        try {
            if (args.length > 0) {
                reader = new FileReader(args[0]);
                int[][] thisArray = fillArray(reader);
                for (int i = 0; i < thisArray.length; ++i) {
                    for (int j = 0; j < thisArray[0].length; ++j) {
                        System.out.println(String.format("[%5d, %5d]: %5d", i, j, thisArray[i][j]));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(reader);
        }
    }

    private static void close(Reader reader) {
        try {
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static int[][] fillArray(Reader reader) throws IOException {
        int [][] array;
        BufferedReader br = new BufferedReader(reader);
        String line;
        int maxRows = Integer.parseInt(br.readLine());
        int maxCols = Integer.parseInt(br.readLine());
        array = new int[maxRows][maxCols];
        int i = 0;
        int j = 0;
        while ((line = br.readLine()) != null) {
            if (StringUtils.isNotBlank(line) && !line.startsWith("#")) {
                array[i][j++] = Integer.parseInt(line);
                if (j == maxCols) {
                    ++i;
                    j = 0;
                }
            }
        }
        return array;
    }
}

這是我使用的輸入文件:第一個值是#行,第二個是#cols,其余是矩陣值。

2
3

# first row
1
2
3

# second row
4
5
6

這是我用一個簡單文件得到的輸出,每行一個值。 我讀了一個2x3矩陣:

[    0,     0]:     1
[    0,     1]:     2
[    0,     2]:     3
[    1,     0]:     4
[    1,     1]:     5
[    1,     2]:     6

Process finished with exit code 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM