下面是我正在编写的程序的开头,该程序用于从weather.txt中读取温度信息,该程序以以下格式列出日期和温度数据:01/01/1941 38 25
,分别表示日期,最低温度和最高温度。 weather.txt中的第一个条目是数据条目的总数,接下来的3行用于格式化:
import java.io.*;
import java.util.*;
public class WeatherAnalysis {
public static void main(String[] args) throws FileNotFoundException {
Scanner input = new Scanner(new File("weather.txt"));
input.useDelimiter("[/ \t\n\r]+");
int tempCount = input.nextInt();
int[] month = {tempCount};
int[] day = {tempCount};
int[] year = {tempCount};
int[] tmax = {tempCount};
int[] tmin = {tempCount};
System.out.println("There are " + tempCount + " entries.");
for (int i = 0; i < 3; i++) {
input.nextLine();
}
int count = 0;
for (int i = 0; i <= tempCount; i++) {
if (count < 5) {
switch(count) {
case 0:
month[i]=input.nextInt();
break;
case 1:
day[i]=input.nextInt();
break;
case 2:
year[i]=input.nextInt();
break;
case 3:
tmax[i]=input.nextInt();
break;
case 4:
tmin[i]=input.nextInt();
break;
}
count++;
}
else {
count = 0;
}
}
}
}
我已经初始化5个整数数组。由于数据是静态格式化的,因此我打算通过固定格式读取每条数据。为此,我创建了带有计数器的switch语句。
我的想法是count
变量将找到相应的大小写,将元素添加到数组,中断并递增计数器,然后再获取下一个输入。使用Eclipse的调试器,我可以看到i
和count
变量正确地递增。
但是,只要调试器读取day[i]=input.nextInt();
,我就会遇到...
线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException: 1在WeatherAnalysis.main(WeatherAnalysis.java:29)
诚然,我在掌握数组方面有些困难。我知道我的初始化很差。对于初学者来说,它们的FAR太高(有30k数据条目),但是我担心将其设置为任意值,因为担心它太小。
另外...使用这种方法,我认为如果我打印出数组,我将有很多随机跳转。我相信元素最初会设置为0,所以我的想法是我的数组可能像0,0,0,46,0,0,0,42
等那样结束。
任何见识将不胜感激。这是我在这里的第二篇文章,请原谅任何格式,谢谢!!
答案 0 :(得分:4)
当您这样做:
int[] month = {tempCount};
这将创建仅包含一个元素Array
的{{1}}。您想要:
tempCount
这将创建一个 size int[] month = new int[tempCount];
Array
还请注意此循环:
tempCount
正在调用for (int i = 0; i < 3; i++) {
input.nextLine();
}
,而没有解决任何问题。
我相信元素最初会设置为0,所以我的想法是我的数组可能最终像0,0,0,46,0,0,0,42等。
是的,这是正确的,因为您始终将其设置为nextLine()
,只要您将其添加到任何i
中,它就会增加。我建议您使用Array
,这样您就可以简单地使用List
方法并将其添加到add()
的末尾。另外,ArrayList
的大小也不固定,因此您不必事先声明大小。
答案 1 :(得分:1)
您不能像这样i <= tempCount;
那样做,因为您定义的数组只允许从0到小于tempCount;
应该{{1}} <=仅小于此处,否则您必须增加数组大小(第一个点)
第二点是for (int i = 0; i < tempCount; i++)
,这意味着您仅定义该数组具有1个元素?定义数组的方式不正确。应该是这样的int[] month = {tempCount};
希望有帮助