我正在尝试创建可以存储0.00到100.00之间浮点数的数组。我遇到了hArray的问题,回到第四位,说它需要初始化并尝试多种方法来做到这一点,它告诉我将它改为doublehArray [] = null;。但是当我尝试不存储任何valuse时。
问题出现在第3行和第27行之间,即hArray [i}] = rnum
忽略打印行命令我只是用它来检查错误。
public static void main(String[] args) {
int i;
double hArray[];
int nYears = 0, y = 0;
double rMax = 0.00,rMin = 100.00;
get input check if between 1-80
while(y == 0){
String userData = JOptionPane.showInputDialog
("Enter number of years");
nYears = Integer.parseInt(userData);
if (nYears > 1 && nYears <= 80 )
y = 1;
}
reset y to = 0
y = 0;
System.out.println("step1 "+ nYears+ " "+ y);
while(y <= nYears){
System.out.println("step2");
for(i = 0; i < 12; i++){
System.out.println("step3");
Random rand = new Random();
double rNum = rand.nextFloat() * (rMax - rMin) + rMin;
hArray[i] = rNum;
System.out.println("step4" + hArray[i]);
}
答案 0 :(得分:2)
重要的是要注意Java中的一些内容。首先,这一行是“声明参考”:
double hArray[];
所有这就是说会有一个double
类型的数组,并为该数组提供名称hArray
。那个数组实际上没有初始化。然后,在这一行:
hArray[i] = rNum;
... rNum
实际上无法放在任何地方,因为数组不存在。
首先你可以做这样的事情,将数组“初始化”为12
长度:
double[] hArray = new double[12];
然后第二行将起作用。请注意,如果您尝试引用大于12
的位置,则会导致错误:此处列表的大小被视为不可变。
或者,您可以远离使用基元并使用Collection。在这种情况下,List
:
List<Double> hArray = new ArrayList<>();
然后,后来:
hArray.add(rNum);
这可以防止您需要知道从一开始就需要多大的数组。列表将自动缩放。此外,它不会假设默认值:通过初始化基元数组,将在数组中放置相当于0
的默认值。避免使用原语被认为是最佳实践。
答案 1 :(得分:1)
double hArray[]
声明一个数组,但不分配它
还要记住,数组是固定大小的。
由于您的代码需要12个值的数组,因此您应该更改为:
double[] hArray = new double[12];
现在将为数组分配12个值,所有值都默认为0.0
。