[英]Getting array index out of bounds exception but don't know why?
我正在尝试创建一个split()
方法,该方法逐行读取文件,然后将String
和Integer
分离成一个数组,然后将其写入另一个文件。 我创建了一个数组来保存每个称为list
String
并保存一个称为scores
的Integer
。
当我尝试运行我的代码时,它到达list
数组中的第二个元素,即surname = list[1]
,然后出现错误。
我最终想要做的是拆分每个元素并获取整数的平均值,这样原始文本行将显示为Mildred Bush 45 65 45 67 65
而我的新文本行将显示为Bush, Mildred: Final score is x.xx
。
错误发生在第7行, surname = list[1];
我的代码:
public void splitTest()
{
String forename, surname, tempStr, InputFileName, OutputFileName;
tempStr = "";
String[] list = new String[6];
list = tempStr.split(" ");
forename = list[0];
surname = list[1];
int[] scores = new int[5];
scores[0] = Integer.parseInt(list[2]);
scores[1] = Integer.parseInt(list[3]);
scores[2] = Integer.parseInt(list[4]);
scores[3] = Integer.parseInt(list[5]);
scores[4] = Integer.parseInt(list[6]);
FileReader fileReader = null;
BufferedReader bufferedReader = null;
FileOutputStream outputStream = null;
PrintWriter printWriter = null;
clrscr();
System.out.println("Please enter the name of the file that is to be READ (e.g. details.txt) : ");
InputFileName = Genio.getString();
System.out.println("Please enter the name of the file that is to be WRITTEN TO (e.g. newDetails.txt) : ");
OutputFileName = Genio.getString();
try {
fileReader = new FileReader(InputFileName);
bufferedReader = new BufferedReader(fileReader);
outputStream = new FileOutputStream(OutputFileName);
printWriter = new PrintWriter(outputStream);
tempStr = bufferedReader.readLine();
while (tempStr != null) {
System.out.println(tempStr);
printWriter.write(tempStr+"\n");
tempStr = bufferedReader.readLine();
}
System.out.println("\n\nYOUR NEW FILE DATA IS DISPLAYED ABOVE!\n\n");
pressKey();
bufferedReader.close();
printWriter.close();
} catch (IOException e) {
System.out.println("Sorry, there has been a problem opening or reading from the file");
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException e) {
System.out.println("An error occurred when attempting to close the file");
}
}
if(printWriter != null) {
printWriter.close();
}
}
}
Genio
,这是一个处理用户输入的类。
您使用以下方法初始化list
数组
list = tempStr.split(" ");
该数组的大小可以是任何值。 这取决于tempStr
的空格tempStr
。 您必须在访问list
元素之前检查list
的长度。
如果您期望输入包含一定数量的参数,请添加检查:
list = tempStr.split(" ");
int[] scores = new int[5];
if (list.length > 6) {
forename = list[0];
surname = list[1];
scores[0] = Integer.parseInt(list[2]);
scores[1] = Integer.parseInt(list[3]);
scores[2] = Integer.parseInt(list[4]);
scores[3] = Integer.parseInt(list[5]);
scores[4] = Integer.parseInt(list[6]);
}
这样可以防止异常。 当然,您必须决定如何处理条件为假的情况。
编辑:
tempStr = "";
这意味着list
中将只有一个元素。 我假设您要在此变量中放入一些实际值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.