繁体   English   中英

(Java)数组超出范围异常

[英](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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM