Java 向数组和switch语句添加元素时出现问题,错误为ArrayIndexOutOfBoundsException
下面是我正在编写的一个程序的开始,该程序从weather.txt读取温度信息,该程序以以下格式列出日期和温度数据:Java 向数组和switch语句添加元素时出现问题,错误为ArrayIndexOutOfBoundsException,java,arrays,switch-statement,Java,Arrays,Switch Statement,下面是我正在编写的一个程序的开始,该程序从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 Fil
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;
}
}
}
}
import java.io.*;
导入java.util.*;
公共类天气分析{
公共静态void main(字符串[]args)引发FileNotFoundException{
扫描仪输入=新扫描仪(新文件(“weather.txt”);
input.useDelimiter(“[/\t\n\r]+”);
int tempCount=input.nextInt();
int[]月={tempCount};
int[]天={tempCount};
int[]年={tempCount};
int[]tmax={tempCount};
int[]tmin={tempCount};
System.out.println(“有“+tempCount+”个条目”);
对于(int i=0;i<3;i++){
input.nextLine();
}
整数计数=0;
对于(int i=0;i你不能这样做i你不能这样做i当你这样做时:
int[] month = {tempCount};
这将仅创建一个元素的数组
,tempCount
。您需要:
int[] month = new int[tempCount];
这将创建一个大小为tempCount
还要注意,此循环:
for (int i = 0; i < 3; i++) {
input.nextLine();
}
for(int i=0;i<3;i++){
input.nextLine();
}
正在调用nextLine()
,但未将其解析为任何内容
我相信元素最初被设置为0,所以我的想法是数组可能会以0,0,0,46,0,0,0,42等形式结束
是的,这将是正确的,因为您总是将其设置为i
,当您添加到任何数组中时,该值都会增加。我建议使用列表
,这样您就可以简单地使用添加()
方法,并将其添加到列表的末尾。
也没有固定的大小,因此您不必事先声明大小。当您这样做时:
int[] month = {tempCount};
这将仅创建一个元素的数组
,tempCount
。您需要:
int[] month = new int[tempCount];
这将创建一个大小为tempCount
还要注意,此循环:
for (int i = 0; i < 3; i++) {
input.nextLine();
}
for(int i=0;i<3;i++){
input.nextLine();
}
正在调用nextLine()
,但未将其解析为任何内容
我相信元素最初被设置为0,所以我的想法是数组可能会以0,0,0,46,0,0,0,42等形式结束
是的,这将是正确的,因为您总是将其设置为i
,当您添加到任何数组中时,该值都会增加。我建议使用列表
,这样您就可以简单地使用添加()
方法,并将其添加到列表的末尾。
也没有固定的大小,因此您不必事先声明大小。哇,这是一个多么愚蠢的错误!谢谢!文本文件中的第一个整数是数据条目的数量(因此是tempCount),以下3行纯粹用于文本文档的格式设置。我的目的是让循环跳过这些行,以便它从以数据开头的那一行开始。这不正确吗?@SamPhinney不,这不正确,我只是想你可能是无意中跳过了重要数据。哇,这是一个多么愚蠢的错误!谢谢您!文本文件中的第一个整数是数据项的数量(因此为tempCount),以下3行纯粹用于文本文档的格式设置。我的目的是让循环跳过这些行,以便从以数据开头的行开始。这不正确吗?@SamPhinney不,这不正确,我只是想你可能是无意中跳过了重要数据。