Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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_Sorting_Multidimensional Array_Java.util.scanner - Fatal编程技术网

Java 如何对大型文本文件进行排序';将数据转换为多维数组?

Java 如何对大型文本文件进行排序';将数据转换为多维数组?,java,arrays,sorting,multidimensional-array,java.util.scanner,Java,Arrays,Sorting,Multidimensional Array,Java.util.scanner,我有一个非常大的数据文件。它从一个大段落开始,我想忽略或从方程中删除,然后是一年,例如1974年,然后是6个空格,然后是一个数字来表示一个月,例如1,然后是31个数据项,我想将其排序到一个3D数组中 我想我已经接近解决这个问题了,但是我一直得到异常java.lang.ArrayIndexOutOfBoundsException 完全错误为: 线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:31 位于pkg110_term3.GetData

我有一个非常大的数据文件。它从一个大段落开始,我想忽略或从方程中删除,然后是一年,例如1974年,然后是6个空格,然后是一个数字来表示一个月,例如1,然后是31个数据项,我想将其排序到一个3D数组中

我想我已经接近解决这个问题了,但是我一直得到异常
java.lang.ArrayIndexOutOfBoundsException

完全错误为:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:31 位于pkg110_term3.GetData.readFile(GetData.java:48) 在pkg110_term3.Main.Main(Main.java:25) Java结果:1

这是我的密码:

public class GetData {

    public String[][][] sortedData = new String[34][12][31];

    int a = 0;
    int b = 0;
    int c = 0;

    private Scanner rainFile;

    //method for opening the file
    public void openFile() {

        try{
            rainFile = new Scanner(new File("C:\\\\Users\\\\admin\\\\Documents\\\\NetBeansProjects\\\\110_term3\\\\WeatherDataFiles\\\\rainfall.txt"));
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, "Check the file path is correct.", "No file found!", JOptionPane.ERROR_MESSAGE);
        }
    }

    //method for reading the file
    public void readFile(){

        if(rainFile.equals("Daily Rainfall Totals (mm), Hazelrigg Weather Station, Lancaster University (Meteorological Office Climatological Station Number 7236) \n" +
"Brian Davison, LEC, Lancaster University, data obtained March 2012 \n" +
"Format=Year, Month, 1-31 daily precipitation values. Any entry set to -99.99 means that no data exists for that day. ")){
            rainFile.remove();
        }
        while(rainFile.hasNext()){
            rainFile.next();
            a++;
            while(rainFile.hasNext()){
                rainFile.next();
                b++;
                for(int i = 0; i < 31; i++){
                    String day = rainFile.next();
                    sortedData[a][b][c] = day;
                    c++;
                }
            }
        }           
        }

        //close the file once it's been used
        public void closeFile(){
            rainFile.close();
        }


        //test method to see if array is full
        public void arrayTest(){
            System.out.print(sortedData[0][0][0]);
            System.out.print("\n");
            System.out.print(sortedData[0][1][0]);
            System.out.print("\n");
        }

}

我刚刚意识到每个月都用一行分隔,我可以用它来简化排序吗?

如果您的代码再次尝试执行以下循环,则
c
的起始值将为31

            for(int i = 0; i < 31; i++){
                String day = rainFile.next();
                sortedData[a][b][c] = day;
                c++;
            {
for(int i=0;i<31;i++){
字符串day=rainFile.next();
排序数据[a][b][c]=天;
C++;
{

您在开始时设置了
a
b
c
,然后只增加它们。

给我们堆栈跟踪。找到跟踪显示的与IndexOutOfBounds相关的行号,让我们知道它是什么。它位于第31行。下面是完整的错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:31在pkg110_term3.GetData.readFile(GetData.java:48)在pkg110_term3.Main.Main(Main.java:25)java结果:1
它与
sortedData[a][b][c]在同一行=天;
你能在你的rainum.txt上显示几行吗?当然,我在它的前两年编辑过。但是它非常长。嘿,谢谢你指出这一点。我刚刚更改了它,使c被I取代。但是我仍然有越界例外。现在看看
b
。当你切换到第二年时,你的索引将是12岁,又出界了。
            for(int i = 0; i < 31; i++){
                String day = rainFile.next();
                sortedData[a][b][c] = day;
                c++;
            {