2013-10-25 101 views
0

所以,我一直在爲我的計算機科學課程編寫一些代碼來計算熱指數。我有麻煩加載數據從文本文件,我被指示與該程序將要使用的數組一起工作。你看到的塊被註釋掉了,這是我正在嘗試的另一個解決方案,它也不能工作......我應該如何解決它?謝謝!(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); 
} 


} 
} 
+2

keyWestTemp是大小爲0如果你不知道你的尺寸數組將在您創建它時使用List代替(通常的實現是ArrayList) – njzk2

+0

該異常會告訴您發生了哪一行,您嘗試獲取的索引以及容器的大小。用它來解決這個問題,或者至少告訴我們這3件事情。 – clcto

回答

1

這一行:

double [] keyWestTemp = {}; 

您已經創建長度爲零的數組,這樣你就不能分配任何它。你不能調整數組的大小,所以它幾乎沒用。

你需要建立一個規模在使用它之前:

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

你需要爲keyWestHumid陣列做同樣的。

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

這些是零大小的數組。並且嘗試爲這些數組分配值而不設置大小將導致出界異常。

如果您知道陣列的最大尺寸,則可以使用普通陣列。正如答案中提到的@rgettman

如果您不確定陣列的最大元素數量。使用ArrayList。當添加元素時, ArrayList會自動增長。

0

使用ArrayList:

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

而且它的常用方法:

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

使用列表,如果在所有possibble。

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++ 
}