问题
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)
回答1:
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);
}
回答2:
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
}
来源:https://stackoverflow.com/questions/20621252/how-to-split-a-file-into-multiple-arrays-display-them-and-perform-calculations