Java 如何将文件拆分为多个数组、显示它们以及在某些数组上执行计算
我有一个关于如何将文件数据拆分为多个数组并在某些数组上执行计算的问题。在我的例子中,我需要阅读一份飓风文件,打印出名称、年份、类别、压力和风速,然后找到类别、压力和风速的平均值,然后找到特定类别的编号,如类别1:26。我不知道怎么做。我在.nextInt()中使用了,但我认为它会打印出文件行中的所有数字,然后继续下一行,依此类推,因为当我运行程序时,我遇到了一个错误。我怎样才能编写这样的程序?任何帮助都将不胜感激。下面是我试图读取的文件 hurcata2.txt:Java 如何将文件拆分为多个数组、显示它们以及在某些数组上执行计算,java,arrays,file-io,date-arithmetic,Java,Arrays,File Io,Date Arithmetic,我有一个关于如何将文件数据拆分为多个数组并在某些数组上执行计算的问题。在我的例子中,我需要阅读一份飓风文件,打印出名称、年份、类别、压力和风速,然后找到类别、压力和风速的平均值,然后找到特定类别的编号,如类别1:26。我不知道怎么做。我在.nextInt()中使用了,但我认为它会打印出文件行中的所有数字,然后继续下一行,依此类推,因为当我运行程序时,我遇到了一个错误。我怎样才能编写这样的程序?任何帮助都将不胜感激。下面是我试图读取的文件 hurcata2.txt: 1980 Aug 945
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
下面是我编写的程序的代码,该程序无法正确运行
飓风2.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();
}
}
当我运行它时,会得到以下信息:
run:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Hurricanes2.main(Hurricanes2.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
我将使用arraylist并解析每一行。当前您正在创建没有长度的数组。数组不能更改其大小,但arraylist可以。比如说:
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
}
列表年份=新的ArrayList;
列表月份=新建ArrayList;
//等等。。。
而((String line=infle.nextLine())!=null){//逐行读取文件
String[]values=line.split(“”.trim();//拆分行并添加到字符串数组
year.add(Integer.parseInt(值[0]);//作为整数添加到列表
month.add(值[1]);//添加到列表
}
这对你有用
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);
}
Scanner scan=new Scanner(新文件阅读器(新文件(“hurcata2.txt”));
列表年份=新的ArrayList();
列表月份=新建ArrayList();
列表风速=新的ArrayList();
列表压力=新的ArrayList();
列表名称=新的ArrayList();
列表类别=新的ArrayList();
while(scan.hasNext()){
字符串输入=scan.nextLine();
字符串[]hurricane=input.split(\\s+);
年份.add(整数.parseInt(飓风[0]);
添加(飓风[1].trim());
风速.add(整数.parseInt(飓风[2]);
pressure.add(Integer.parseInt(飓风[3]);
name.add(飓风[4].trim());
category.add(Integer.parseInt(飓风[5]);
}
整数和=0;
用于(整数:压力){
sum+=integer.intValue();
}
双平均值=总和/压力。尺寸();
//系统输出打印项次(平均值);
}
您正在创建0长度数组,因此无法访问数组中的任何元素。如果你想使用标准数组,你需要知道创建它时它会有多大。我建议使用ArrayList
,并在\\s+
trim()上拆分字符串
。