(Java)数组越界异常

时间:2013-10-25 15:53:26

标签: java

所以,我一直在研究计算机科学课程的一些代码来计算热指数。我有麻烦从我被指示使用的文本文件中加载数据到程序将要使用的数组中。你看到的块被注释掉了我正在尝试的另一种解决方案,它也无法正常工作......我应该如何修复它?谢谢!

import java.util.Scanner; 
import java.io.File; 
import java.io.IOException;

public class HeatIndex
{

public static void main(String [] args) throws IOException 
{
Scanner keyWestHumidScan = new Scanner(new File("KeyWestHumid.txt"));
Scanner keyWestTempScan = new Scanner(new File("KeyWestTemp.txt"));

int counter1 = 0;
int counter2 = 0;
int [] keyWestHumid = {};
double [] keyWestTemp = {};
String header1 = "                                     Heat index: Key West, Florida                              ";
String header2 = "\n                                                Months                                        \n          ";
String [] months = {"Jan   ", "Feb   ", "Mar   ", "Apr   ", "May   ", "Jun   ", "Jul   ", "Aug   ", "Sep   ", "Oct   ", "Nov   ", "Dec   ", "Avg   \n"};
String header3 = "*************************************************************************************";
String [] Labels = {"Temp (F)      \n", "Hudimitiy (%)    \n", "HI (F)      "};


//read keyWestHumid into array
while(keyWestHumidScan.hasNext())
{
 keyWestHumid[counter1] = keyWestHumidScan.nextInt();
 counter1++;
 //String data1_parse = keyWestHumidScan.next();
 ///int data1 = Integer.parseInt(data1_parse);
 //keyWestHumid[counter1] = data1;
 //counter1++;
   }
//read keyWestTemp into array
while(keyWestTempScan.hasNext()) 
{
   String data2_parse = keyWestTempScan.next();
   double data2 = Double.parseDouble(data2_parse);
   keyWestTemp[counter2] = data2;
   counter2++;

}
System.out.println(header1);
System.out.print(header2);
for(String headData:months) {
System.out.print(headData);
}
System.out.println(header3);
for(String headData:Labels) {
System.out.print(headData);
}


}
}

4 个答案:

答案 0 :(得分:1)

这一行:

double [] keyWestTemp = {};

您创建了一个零长度的数组,因此您无法为其指定任何内容。你无法调整数组的大小,所以它几乎没用。

您需要在使用之前建立尺寸:

double[] keyWestTemp = new double[10];  // adjust size to fit your actual needs

您需要对keyWestHumid数组执行相同操作。

答案 1 :(得分:0)

int [] keyWestHumid = {};
double [] keyWestTemp = {};

这些是零大小的数组。并尝试在不设置大小的情况下为这些数组赋值将导致Out of bounds异常。

如果你知道数组的最大大小,你可以坚持使用普通数组。正如答案1中提到的@rgettman

如果您不确定阵列的最大元素数。使用ArrayList。 添加元素时,ArrayList会自动增长。

答案 2 :(得分:0)

使用ArrayList:

import java.util.ArrayList;
ArrayList<Double> keyWestTemp = new ArrayList<Double>();

这是常用方法:

keyWestTemp.add(...);
keyWestTemp.clear();
keyWestTemp.contains(...);
keyWestTemp.get(...);

答案 3 :(得分:0)

尽可能使用列表。

List<Double> temp = new ArrayList<Double>();
while(keyWestHumidScan.hasNext())
{
 temp.add(keyWestHumidScan.nextInt())
}

但是,如果由于某种原因确实需要一个数组,请使用以下命令将其从List

中导入数组
double[temp.size()] tempArray; 
int i = 0;
for(Double element:temp){
tempArray[i] = element;
i++
}