Nick
Nick

Reputation: 301

ArrayIndexOutOfBoundsException: 4

I'm writing a little program to analyze some data I have and this code, which worked yesterday, is no longer working. For the life of me, I can't tell why. To my eye, everything is as it should be. I've tried re-syncing the folder on my computer with my GitHub Repo and still was receiving the same error. Maybe a second pair of eyes could help me out?

The text file being read from can be found here.

Here are the methods referred to by the stack trace:

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;
}

Line 51:

String tempString = lineDivides[4];

And here is the stack trace:

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)

If you guys need more information, don't hesitate to ask.

Upvotes: 1

Views: 4101

Answers (3)

Nick
Nick

Reputation: 301

So, it was a silly issue.... JSoup had a couple bad connections and didn't save some of the data I needed it to save. So it didn't recognize some of the lines of data.
Once I fixed the actual data, it runs without issue again.
I apologize for wasting your time.

Upvotes: 0

Luiggi Mendoza
Luiggi Mendoza

Reputation: 85779

The problem is here, inside your getHumiditiesFromFile method:

while(1 < numLines){

It should be

while (i < numLines){

Since inside this loop you're calling humiditiesFromFile[i].


As Foo Bar User noted in comment, the error may be here:

String tempString = lineDivides[4];

It would be better to make sure there are at least 4 items in that array.

Besides that, the error noted in the section above (assuming it's not a typo) could also throw this Exception for being in an infinite loop.

Upvotes: 3

asteri
asteri

Reputation: 11572

You've hardcoded a 4 here without checking to see if it exists:

String tempString = lineDivides[4]; 

You will need to do some data validation beforehand. You're assuming that the line you read has at least three commas. Either change the code to check, or validate the file.

Upvotes: 0

Related Questions