[英](Java) Array out of bounds exception
因此,我一直在為計算機科學課程編寫一些代碼來計算熱量指數。 我在從被指示要使用的文本文件中加載數據到程序將要使用的數組時遇到了麻煩。 您看到的注釋塊是我正在嘗試的另一種解決方案,它也不起作用...我應該如何解決它? 謝謝!
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);
}
}
}
用這行:
double [] keyWestTemp = {};
您創建了一個長度為零的數組,因此您無法為其分配任何內容。 您無法調整數組大小,因此幾乎沒有用。
您需要先確定尺寸,然后再使用它:
double[] keyWestTemp = new double[10]; // adjust size to fit your actual needs
您需要對keyWestHumid
數組執行相同的keyWestHumid
。
int [] keyWestHumid = {};
double [] keyWestTemp = {};
這些是零大小的數組。 嘗試在不設置大小的情況下為這些數組分配值將導致“超出范圍”異常。
如果知道陣列的最大大小,則可以繼續使用普通陣列。 如@rgettman在答案1中所述
如果不確定該數組的最大元素數。 使用ArrayList 。 添加元素時, ArrayList
將自動增長。
使用ArrayList:
import java.util.ArrayList;
ArrayList<Double> keyWestTemp = new ArrayList<Double>();
這是常見的方法:
keyWestTemp.add(...);
keyWestTemp.clear();
keyWestTemp.contains(...);
keyWestTemp.get(...);
如果有可能,請使用列表。
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++
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.