【发布时间】:2018-12-13 01:04:01
【问题描述】:
下面是我正在编写的从 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)
诚然,我很难掌握数组。我知道我的初始化很差。对于初学者来说,它们太高了(有 30k 个数据条目),但我不敢将其设置为任意值,因为担心它太小。
另外......使用这种方法,如果我打印出我的数组,我想我会有很多随机跳转。我相信元素最初设置为 0,所以我的想法是我的数组最终可能会像 0,0,0,46,0,0,0,42 等。
任何见解将不胜感激。这是我在这里的第二篇文章,请原谅任何格式,谢谢!!
【问题讨论】:
标签: java arrays switch-statement