how to split a file into multiple arrays, display them, and perform calculations on some arrays

StackOverflow https://stackoverflow.com/questions/20621252

Domanda

I have a question on how to split a file's data into multiple arrays and perform calculations on certain arrays. In my case, I need to read a hurricanes file and print out the name, year, category, pressure and windspeed each in its own array and then find the average of the category, pressure, and windspeed and then find out the number of a specific category, like Category 1: 26. I don't know how to do this. I used in.nextInt() but I assume it would print out all the numbers in the line of the file and then go on to the next and so on because when I ran my program, I got an error. How can I write a program like this? Any help will be greatly appreciated. Below is the file that I am trying to read from.

hurcdata2.txt:

1980 Aug    945 100 Allen           2
1983 Aug    962 100 Alicia          2
1984 Sep    949 100 Diana           2
1985 Jul    1002    65  Bob         1
1985 Aug    987 80  Danny           1
1985 Sep    959 100 Elena           2
1985 Sep    942 90  Gloria          1
1985 Oct    971 75  Juan            1
1985 Nov    967 85  Kate            1
1986 Jun    990 75  Bonnie          1
1986 Aug    990 65  Charley         1
1987 Oct    993 65  Floyd           1
1988 Sep    984 70  Florence        1
1989 Aug    986 70  Chantal         1
1989 Sep    934 120 Hugo            3
1989 Oct    983 75  Jerry           1
1991 Aug    962 90  Bob         1
1992 Aug    922 145 Andrew          4
1993 Aug    960 100 Emily           2
1995 Aug    973 85  Erin            1
1995 Oct    942 100 Opal            2
1996 Jul    974 90  Bertha          1
1996 Sep    954 100 Fran            2
1997 Jul    984 70  Danny           1
1998 Aug    964 95  Bonnie          1
1998 Sep    987 70  Earl            1
1998 Sep    964 90  Georges         1
1999 Aug    951 100 Bret            2
1999 Sep    956 90  Floyd           1
1999 Oct    987 70  Irene           1
2002 Oct    963 80  Lili            1
2003 Jul    979 80  Claudette       1
2003 Sep    957 90  Isabel          1
2004 Aug    972 70  Alex            1
2004 Aug    941 130 Charley         4
2004 Aug    985 65  Gaston          1
2004 Sep    960 90  Frances         1
2004 Sep    946 105 Ivan            2
2004 Sep    950 105 Jeanne          2
2005 Jul    992 65  Cindy           1
2005 Jul    930 130 Dennis          4
2005 Jul    929 135 Emily           4
2005 Aug    975 85  Irene           1
2005 Aug    902 150 Katrina         4
2005 Sep    960 100 Maria           2
2005 Sep    979 80  Nate            1
2005 Sep    976 80  Ophelia         1
2005 Sep    985 70  Phillipe        1
2005 Sep    897 150 Rita            4
2005 Sep    979 70  Stan            1
2005 Sep    987 65  Vince           1
2005 Sep    882 150 Wilma           4
2005 Sep    960 100 Beta            2
2005 Sep    979 75  Epsilon         1
2006 Aug    995 65  Ernesto         1
2006 Sep    972 80  Florence        1
2006 Sep    955 105 Gordon          2
2006 Sep    954 110 Helene          2
2006 Sep    985 75  Isaac           1

Below is the code for my program that I wrote that does not run correctly

Hurricanes2.java:

import java.io.File;
import java.util.Scanner;
import java.io.IOException;
import java.util.ArrayList;

public class Hurricanes2{

public static void main(String args[]) throws IOException{

    // create Scanner inFile
    File filename = new File("/Users/timothylee/hurcdata2.txt");

    int i = 0;

    int[] values = new int[i];
    String[] HurrNames = new String[i];

    Scanner inFile = new Scanner(filename);

    while(inFile.hasNext()){
        values[i] = inFile.nextInt();
        HurrNames[i] = inFile.next();
        i++;
        System.out.println(values[i]);
        System.out.println(HurrNames[i]);
    }
    inFile.close();
}
}

I get this when I run it:

run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Hurricanes2.main(Hurricanes2.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
È stato utile?

Soluzione 2

This is gonna work for you.

    Scanner scan = new Scanner(new FileReader(new File("hurcdata2.txt")));
    List<Integer> year = new ArrayList<Integer>();
    List<String> month = new ArrayList<String>();
    List<Integer> windspeed = new ArrayList<Integer>();
    List<Integer> pressure = new ArrayList<Integer>();
    List<String> name = new ArrayList<String>();
    List<Integer> category = new ArrayList<Integer>();

    while(scan.hasNext()){
        String input = scan.nextLine();
        String[] hurricane = input.split("\\s+");
        year.add(Integer.parseInt(hurricane[0]));
        month.add(hurricane[1].trim());
        windspeed.add(Integer.parseInt(hurricane[2]));
        pressure.add(Integer.parseInt(hurricane[3]));
        name.add(hurricane[4].trim());
        category.add(Integer.parseInt(hurricane[5]));
    }

    int sum = 0;
    for(Integer integer : pressure){
        sum += integer.intValue();
    }

    double average = sum / pressure.size();
    //System.out.println(average);
}

Altri suggerimenti

I would use a arraylist and parse each line. Currently you're creating arrays with no length. An array cannot change its size however an arraylist can. So something like this:

List<Integer> year = new ArrayList<Integer>;
List<String> month = new ArrayList<String>;
// etc...

while((String line = inFile.nextLine()) != null){ // read file line by line
    String[] values = line.split(" ").trim(); // split line and add to string array
    year.add(Integer.parseInt(values[0])); // add to list as an Integer
    month.add(values[1]); // add to list
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top