获取数组索引超出范围异常但不知道为什么?

时间:2014-11-20 11:52:26

标签: java arrays

我正在尝试创建一个逐行读取文件的split()方法,然后将StringInteger分成一个数组,然后写入另一个文件。我创建了一个数组来保存名为String的每个list,并保存一个名为Integer的{​​{1}}。

当我尝试运行我的代码时,它到达scores数组中的第二个元素list,然后我收到错误。

我最终要做的是拆分每个元素并获得整数的平均值,以便原始文本行读取surname = list[1],我的新文本行将显示为Mildred Bush 45 65 45 67 65

错误发生在第7行Bush, Mildred: Final score is x.xx

我的代码:

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(); } } } ,这是一个处理用户输入的类。

1 个答案:

答案 0 :(得分:3)

使用

初始化list数组
list = tempStr.split(" ");

该数组的大小可以是任何值。这取决于tempStr中的空格数。 在访问其元素之前,您必须检查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中只有一个元素。我假设您打算在此变量中加入一些实际值。