Frage

Ich erstelle ein einfaches Programm, in dem ich 20 Ganzzahlwerte aus einer Textdatei in das 2D-Array eingebe.Ich habe den Zeilen- und Spaltenwert über die ersten beiden Werte in der Textdatei erhalten.

Soweit ich weiß, ist das IndexOutOfBoundsException bedeutet, dass mein 2D-Array (4 Zeilen und 5 Spalten):

  1. Die Werte sind größer als die Arraygröße- nicht möglich, da nur 20 Werte vorhanden sind.
  2. Es gibt nicht genügend Werte, um den Array-Grund zu füllen

Was vermisse ich? 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();
    }
}
}

Textdatei: (1 Zahl pro Zeile) 4 5 1 3 5 7 12 34 56 78 21 44 36 77 29 87 48 77 25 65 77 2

War es hilfreich?

Lösung

Ich würde wetten, dass Sie den Namen Ihrer Datendatei nicht an Ihr Programm weitergeben.

Wenn args.length == 0 Dann args[0] wirft ArrayIndexOutOfBoundsException

Das ist ungefähr die einzige Möglichkeit, diesen Fehler in dieser Zeile zu erhalten.

Andere Tipps

Ihr Code sieht gut aus, aber ich denke, Sie müssen vorher die Werte von Zeile und Spalte überprüfen

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

Höchstwahrscheinlich liegt dort der Fehler.

UPDATE - Bingo.es ist

fillArray(args[0])

Sie übergeben keine Parameter an Ihr Programm.

Versuchen Sie es stattdessen

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

Ich würde es eher so machen:

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;
    }
}

Hier ist die Eingabedatei, die ich verwendet habe:Der erste Wert besteht aus # Zeilen, der zweite aus # Spalten, der Rest sind die Matrixwerte.

2
3

# first row
1
2
3

# second row
4
5
6

Hier ist die Ausgabe, die ich mit einer einfachen Datei erhalten habe, ein Wert pro Zeile.Ich habe in einer 2x3-Matrix gelesen:

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

Process finished with exit code 0
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top