繁体   English   中英

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

[英]Getting array index out of bounds exception but don't know why?

我正在尝试创建一个split()方法,该方法逐行读取文件,然后将StringInteger分离成一个数组,然后将其写入另一个文件。 我创建了一个数组来保存每个称为list String并保存一个称为scoresInteger

当我尝试运行我的代码时,它到达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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM