Java-数组索引越界异常

Java-数组索引越界异常,java,arrays,indexoutofboundsexception,Java,Arrays,Indexoutofboundsexception,我正在制作一个简单的程序,从文本文件中输入20个整数值到2D数组中。 我通过文本文件中的前两个值获得了行和列值 据我所知,IndexOutOfBoundsException表示我的2D数组(4行5列): 值大于数组大小-不可能,因为 只有20个值 没有足够的值来填充 数组-^原因 我错过了什么线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:0 public class Practice { public static void main

我正在制作一个简单的程序,从文本文件中输入20个整数值到2D数组中。 我通过文本文件中的前两个值获得了行和列值

据我所知,
IndexOutOfBoundsException
表示我的2D数组(4行5列):

  • 值大于数组大小-不可能,因为 只有20个值
  • 没有足够的值来填充 数组-^原因
  • 我错过了什么<代码>线程“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();
        }
    }
    }
    
    公共课堂实践{
    公共静态void main(字符串[]args){
    int[]thisArray=fillArray(args[0]);
    打印(thisArray,thisArray.length);
    }
    公共静态int[]fillArray(字符串myFile){
    TextFileInput in=新的TextFileInput(myFile);
    字符串r=in.readLine();//4行
    字符串c=in.readLine();//5列
    int row=Integer.parseInt(r);//从字符串解析为int
    int col=Integer.parseInt(c);
    int[][]临时数组=新的int[行][col];
    
    对于(int fillRow=0;fillRow您的代码看起来很好,但是我认为您必须先检查row和col的值

    int[][] tempArray=new int[row][col];
    
    很可能,这就是错误所在

    更新-宾果。它是

    fillArray(args[0])
    
    您没有向程序传递任何参数

    试试看

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

    您的代码看起来很好,但我认为您必须先检查row和col的值

    int[][] tempArray=new int[row][col];
    
    很可能,这就是错误所在

    更新-宾果。它是

    fillArray(args[0])
    
    您没有向程序传递任何参数

    试试看

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

    您的代码看起来很好,但我认为您必须先检查row和col的值

    int[][] tempArray=new int[row][col];
    
    很可能,这就是错误所在

    更新-宾果。它是

    fillArray(args[0])
    
    您没有向程序传递任何参数

    试试看

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

    您的代码看起来很好,但我认为您必须先检查row和col的值

    int[][] tempArray=new int[row][col];
    
    很可能,这就是错误所在

    更新-宾果。它是

    fillArray(args[0])
    
    您没有向程序传递任何参数

    试试看

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

    我敢打赌你没有将数据文件的名称传递给你的程序

    如果
    args.length==0
    args[0]
    抛出
    ArrayIndexOutOfBoundsException


    这是在那一行中获得错误的唯一方法。

    我敢打赌,您没有将数据文件的名称传递给程序

    如果
    args.length==0
    args[0]
    抛出
    ArrayIndexOutOfBoundsException


    这是在那一行中获得错误的唯一方法。

    我敢打赌,您没有将数据文件的名称传递给程序

    如果
    args.length==0
    args[0]
    抛出
    ArrayIndexOutOfBoundsException


    这是在那一行中获得错误的唯一方法。

    我敢打赌,您没有将数据文件的名称传递给程序

    如果
    args.length==0
    args[0]
    抛出
    ArrayIndexOutOfBoundsException


    这大概是在那一行中获得错误的唯一方法。

    我会这样做:

    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;
        }
    }
    
    这是我用一个简单文件得到的输出,每行一个值。我在一个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
    

    我会这样做:

    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;
        }
    }
    
    这是我用一个简单文件得到的输出,每行一个值。我在一个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
    

    我会这样做:

    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;
        }
    }
    
    这是我用一个简单文件得到的输出,每行一个值。我在一个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
    

    我会这样做:

    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;
        }
    }
    
    这是我用一个简单文件得到的输出,每行一个值。我在一个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
    


    你能写文件中写的文本吗?错误发生在哪里?方法
    print()
    看起来像什么?请发布完整的堆栈跟踪。哪一行抛出IOOB?args[0]中有什么内容吗?如果是整行,r怎么会是int?你必须在“int[]tempArray=new int”之前检查行和列的值[row][col];“检查您自己的注释。您写入
    4行5列
    ,但只将一个参数作为行和列的值传递给
    print
    方法。当然,这会给出一个错误。您能写入文件中的文本吗?错误发生在哪里?方法
    print()的作用是什么
    看起来像什么?请发布完整的堆栈跟踪。哪一行抛出IOOB?args[0]中是否有任何内容?如果是整行,r如何成为int?必须在“int[][]tempArray=new int[row][col]”之前检查row和col的值检查您自己的注释。您编写了
    4行,5列
    ,但只将一个参数作为行和列的值传递给
    print
    方法。当然,它会给出一个错误。您可以将写入文件的文本写入吗?错误发生在哪里?方法
    print()的作用是什么
    看起来像什么?请发布完整的堆栈跟踪。哪一行抛出IOOB?args[0]中是否有任何内容?如果是整行,r如何成为int?必须在“int[][]tempArray=new int[row][col]”之前检查row和col的值检查您自己的注释。您编写了
    4行,5列
    ,但只将一个参数作为行和列的值传递给
    print
    方法。当然,它会给出一个错误。您可以将写入文件的文本写入吗?错误发生在哪里?方法
    print()的作用是什么
    看起来像什么?请发布完整的堆栈跟踪。哪一行抛出IOOB?args[0]中是否有任何内容?如果是整行,r如何成为int?必须在“int[][]tempArray=new int[row][col]”之前检查row和col的值检查您自己的注释。您编写了
    4行5列
    ,但只将一个参数作为行和列的值传递给
    print
    方法。当然,这会给出一个错误。检查