Java-数组索引越界异常
我正在制作一个简单的程序,从文本文件中输入20个整数值到2D数组中。 我通过文本文件中的前两个值获得了行和列值 据我所知,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
IndexOutOfBoundsException
表示我的2D数组(4行5列):
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
方法。当然,这会给出一个错误。检查