Pregunta

Estoy creando un programa simple en el que ingreso 20 valores enteros de un archivo de texto en una matriz 2D.Obtuve el valor de la fila y la columna a través de los dos primeros valores en el archivo de texto.

Por lo que tengo entendido, el IndexOutOfBoundsException significa que mi matriz 2D (4 filas y 5 columnas):

  1. Los valores son mayores que el tamaño de la matriz, no es posible porque solo hay 20 valores.
  2. No hay suficientes valores para llenar la matriz- ^

¿Qué me estoy perdiendo? 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();
    }
}
}

TEXTILLO: (1 número por línea) 4 5 1 3 5 7 12 34 56 78 21 44 36 77 29 87 48 77 25 65 77 2

¿Fue útil?

Solución

Estaría dispuesto a apostar que no está pasando el nombre de su archivo de datos a su programa.

si args.length == 0 entonces args[0] lanza ArrayIndexOutOfBoundsException

Esa es la única manera de obtener ese error en esa línea.

Otros consejos

Su código se ve bien, pero creo que tiene que verificar los valores de la fila y el col antes de

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

Probablemente, ahí es donde está el error.

actualización - bingo.es

fillArray(args[0])

No está pasando ningún parámetro a su programa.

intente en lugar

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

Lo haría más así:

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

Aquí está el archivo de entrada que utilizo: el primer valor es # filas, el segundo es # cols, el resto son los valores de la matriz.

2
3

# first row
1
2
3

# second row
4
5
6

Aquí está la salida que tengo con un archivo simple, un valor por línea.Leí en una matriz 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top