1

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

可以在此处找到正在读取的文本文件。

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

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)

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

4

3 回答 3

3

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

while(1 < numLines){

它应该是

while (i < numLines){

因为在这个循环中你正在调用humiditiesFromFile[i].


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

String tempString = lineDivides[4];

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

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

于 2013-09-28T21:43:49.517 回答
0

您在4这里硬编码了 a 而没有检查它是否存在:

String tempString = lineDivides[4]; 

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

于 2013-09-28T21:48:00.423 回答
0

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

于 2013-09-28T22:58:45.980 回答