【问题标题】:ArrayIndexOutOfBoundsException: 4ArrayIndexOutOfBoundsException:4
【发布时间】:2013-09-28 21:42:39
【问题描述】:

我正在编写一个小程序来分析我拥有的一些数据,而昨天运行的这段代码不再运行。 对于我的生活,我说不出为什么。在我看来,一切都是应有的。我尝试使用GitHub Repo 重新同步计算机上的文件夹,但仍然收到相同的错误。也许第二双眼睛可以帮助我?

可以找到正在读取的文本文件here

以下是堆栈跟踪引用的方法:

public static void main(String[] args) throws IOException{
    FileManagementMethods fmm = new FileManagementMethods();
    fmm.runProgram();

}

void runProgram() throws IOException{
    boolean doesFileExist = doesFileExist();
    if(doesFileExist){
        int numLines = getNumberOfLines();
        String[] linesFromFile = getLines(numLines);
        WeatherAnalysisMethods wam = new WeatherAnalysisMethods();
        wam.parseFileAverageTemp(linesFromFile);
        wam.parseFileAverageHumidity(linesFromFile);
        wam.predictNextTemperature(linesFromFile);
    } else{
        try {
            throw new IOException("Could not find log.txt in default directory");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

void parseFileAverageHumidity(String[] linesFromFile) throws IOException{
    int[] humiditiesFromFile = new int[linesFromFile.length];
    humiditiesFromFile = getHumiditiesFromFile(linesFromFile.length);
    int averageFromFile = 0;
    for(int i = 0; i < humiditiesFromFile.length; i++){
        averageFromFile += humiditiesFromFile[i];
    }
    averageFromFile = averageFromFile / humiditiesFromFile.length;
    String outString = "Average humidity for whole file = " + averageFromFile;
    FileManagementMethods fmm = new FileManagementMethods();
    fmm.saveAnalyzedData(outString);
}

int[] getHumiditiesFromFile(int numLines){
    int[] humiditiesFromFile = new int[numLines];
    FileManagementMethods fmm = new FileManagementMethods();
    String[] lines = fmm.getLines(numLines);
    int i = 0;
    while(1 < numLines){
        String[] lineDivides = lines[i].split(",");
        String tempString = lineDivides[4]; 
        humiditiesFromFile[i] = Integer.parseInt(tempString);
        i++;
    }
    return humiditiesFromFile;
}

第 51 行:

String tempString = lineDivides[4];

这是堆栈跟踪

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at org.weatheralert.analysis.WeatherAnalysisMethods.getHumiditiesFromFile(WeatherAnalysisMethods.java:51)
at org.weatheralert.analysis.WeatherAnalysisMethods.parseFileAverageHumidity(WeatherAnalysisMethods.java:22)
at org.weatheralert.analysis.FileManagementMethods.runProgram(FileManagementMethods.java:22)
at org.weatheralert.analysis.Main.main(Main.java:9)

如果你们需要更多信息,请不要犹豫。

【问题讨论】:

  • 更新您的答案以说明 WeatherAnalysisMethods.java:51 是哪一行

标签: java indexoutofboundsexception


【解决方案1】:

问题就在这里,在您的 getHumiditiesFromFile 方法中:

while(1 < numLines){

应该是

while (i < numLines){

因为在这个循环中你调用的是humiditiesFromFile[i]


正如 Foo Bar 用户在评论中指出的那样,错误可能在这里:

String tempString = lineDivides[4];

最好确保该数组中至少有 4 个项目。

除此之外,上一节中提到的错误(假设它不是拼写错误)也可能因处于无限循环而引发此异常。

【讨论】:

  • 更有可能出现在这里 lineDivides[4]
  • @FooBarUser 请注意,由于我们不知道 WeatherAnalysisMethods 中的哪一行是第 51 行,因此我们无法确定。另外,请注意 OP 在while 内有humiditiesFromFile[i]
  • 是的,这是一个更好的答案,实际上他应该提到第 51 行在哪里
  • Foo Bar User 列出了正确的行。我很抱歉没有列出。 pastebin.com/8Q6YF1Bk点击这里查看包含正在读取的数据的文件
  • 即使将代码更改为 Luiggi 建议的内容,我仍然可以在堆栈跟踪中得到确切的内容。 “1”有错别字。
【解决方案2】:

您在此处硬编码了 4,而没有检查它是否存在:

String tempString = lineDivides[4]; 

您需要事先进行一些数据验证。您假设您阅读的行至少包含三个逗号。更改代码以检查,或验证文件。

【讨论】:

  • 我在上面评论了指向保存正在读取的数据的 pastebin 页面的链接。
  • @NickMedovich 哈哈,我不会为你验证一百行数据。对不起。 :)
【解决方案3】:

所以,这是一个愚蠢的问题.... JSoup 有几个坏的连接,并没有保存一些我需要它保存的数据。所以它无法识别某些数据行。
一旦我修复了实际数据,它就会再次运行而没有问题。
很抱歉浪费了您的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-03
    • 2019-06-19
    • 2014-05-19
    • 2013-02-25
    • 2013-12-28
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多