0

所以,我一直在为我的计算机科学课程编写一些代码来计算热量指数。我无法将我被指示使用的文本文件中的数据加载到程序将使用的数组中。您看到注释掉的块是我正在尝试的另一种解决方案,它也不起作用......我应该如何修复它?谢谢!

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

4 回答 4

1

有了这条线:

double [] keyWestTemp = {};

你已经创建了一个长度为零的数组,所以你不能给它分配任何东西。你不能调整数组的大小,所以它几乎没用。

您需要在使用它之前建立一个大小:

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

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

于 2013-10-25T15:55:40.907 回答
0
int [] keyWestHumid = {};
double [] keyWestTemp = {};

这些是大小为零的数组。并且尝试在不设置大小的情况下为这些数组分配值将导致超出范围异常。

如果您知道数组的最大大小,您可以继续使用普通数组。正如@rgettman 在答案 1 中所述

如果您不确定数组的最大元素数。使用ArrayListArrayList添加元素时会自动增长。

于 2013-10-25T15:58:10.657 回答
0

使用 ArrayList:

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

并且是常用的方法:

keyWestTemp.add(...);
keyWestTemp.clear();
keyWestTemp.contains(...);
keyWestTemp.get(...);
于 2013-10-25T15:58:42.800 回答
0

如果可能,请使用列表。

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

但是,如果您出于某种原因确实需要一个数组,请使用以下命令将其从列表中放入一个数组中

double[temp.size()] tempArray; 
int i = 0;
for(Double element:temp){
tempArray[i] = element;
i++
}
于 2013-10-25T16:01:06.127 回答