Java 如何对大型文本文件进行排序';将数据转换为多维数组?
我有一个非常大的数据文件。它从一个大段落开始,我想忽略或从方程中删除,然后是一年,例如1974年,然后是6个空格,然后是一个数字来表示一个月,例如1,然后是31个数据项,我想将其排序到一个3D数组中 我想我已经接近解决这个问题了,但是我一直得到异常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
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++;
{