java - 将元素添加到数组和 switch 语句的问题,错误 ArrayIndexOutOfBoundsException
问题描述
下面是我正在编写的从 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 的调试器,我可以看到 myi
和count
变量正确递增。
但是,一旦调试器读取day[i]=input.nextInt();
我就会遇到......
线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 1 在 WeatherAnalysis.main(WeatherAnalysis.java:29)
诚然,我很难掌握数组。我知道我的初始化很差。对于初学者来说,它们太高了(有 30k 数据条目),但我不愿将其设置为任意值,因为担心它太小。
另外......使用这种方法,我想如果我打印出我的数组,我会有很多随机跳跃。我相信元素最初设置为 0,所以我的想法是我的数组最终可能会像这样0,0,0,46,0,0,0,42
。
任何见解将不胜感激。这是我在这里的第二篇文章,请原谅任何格式,谢谢!
解决方案
当你这样做时:
int[] month = {tempCount};
这将创建一个Array
只有一个元素,tempCount
。你自找的:
int[] month = new int[tempCount];
这将创建Array
一个大小 tempCount
还要注意这个循环:
for (int i = 0; i < 3; i++) {
input.nextLine();
}
正在调用nextLine()
而不解决任何问题。
我相信元素最初设置为 0,所以我的想法是我的数组最终可能会像 0,0,0,46,0,0,0,42 等。
是的,这将是正确的,因为您始终将其设置为i
,每当您添加到任何Array
's 时,它都会增加。我建议使用List
's,以便您可以简单地使用该add()
方法并将其添加到List
. 此外ArrayList
's 没有固定大小,因此您不必事先声明大小。
推荐阅读
- visual-studio-code - 如何在终端上切换焦点
- javascript - 用 D3 更新多线图
- laravel - 将一组 ID 从 Postman 传递到 Laravel API
- apache-spark - 谷歌云数据处理——文件不工作
- python - 如果用户在描述中输入图像 URL 或附加图像,有没有办法让我的机器人嵌入图像?
- google-sheets - 有没有办法让单元格留空
- architecture - 你建议什么语言和平台
- python - 如何让我的计算更快?从txt文件追加的问题?
- apache-spark - 针对数据框的 200 万次查询
- javascript - 如何使 base64 PDF 文件缩放以适合 iframe?