Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将文件拆分为多个数组、显示它们以及在某些数组上执行计算_Java_Arrays_File Io_Date Arithmetic - Fatal编程技术网

Java 如何将文件拆分为多个数组、显示它们以及在某些数组上执行计算

Java 如何将文件拆分为多个数组、显示它们以及在某些数组上执行计算,java,arrays,file-io,date-arithmetic,Java,Arrays,File Io,Date Arithmetic,我有一个关于如何将文件数据拆分为多个数组并在某些数组上执行计算的问题。在我的例子中,我需要阅读一份飓风文件,打印出名称、年份、类别、压力和风速,然后找到类别、压力和风速的平均值,然后找到特定类别的编号,如类别1:26。我不知道怎么做。我在.nextInt()中使用了,但我认为它会打印出文件行中的所有数字,然后继续下一行,依此类推,因为当我运行程序时,我遇到了一个错误。我怎样才能编写这样的程序?任何帮助都将不胜感激。下面是我试图读取的文件 hurcata2.txt: 1980 Aug 945

我有一个关于如何将文件数据拆分为多个数组并在某些数组上执行计算的问题。在我的例子中,我需要阅读一份飓风文件,打印出名称、年份、类别、压力和风速,然后找到类别、压力和风速的平均值,然后找到特定类别的编号,如类别1:26。我不知道怎么做。我在.nextInt()中使用了,但我认为它会打印出文件行中的所有数字,然后继续下一行,依此类推,因为当我运行程序时,我遇到了一个错误。我怎样才能编写这样的程序?任何帮助都将不胜感激。下面是我试图读取的文件

hurcata2.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
下面是我编写的程序的代码,该程序无法正确运行

飓风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()上拆分
字符串