一直在四处寻找,看看是否有什么可以帮助我,但我不太了解人们的回答,我所理解的任何事情似乎都无法解决问题!所以基本上就像标题所说的那样,我得到一个超出界限的数组索引,我不明白为什么。非常感谢任何帮助。
代码:
import javax.swing.*;
public class Array {
public static void main(String[] args) {
double height[] = new double[10];
String heightAsString;
int i, over18 = 0, under16 = 0;
for(i = 1; i <= height.length; i++){
heightAsString = JOptionPane.showInputDialog("Please Enter The Height Of Person " + i);
height[i] = Double.parseDouble(heightAsString);
if(height[i] > 1.8){
over18 += 1;
}
if(height[i] < 1.6){
under16 += 1;
}
}
JOptionPane.showMessageDialog(null,"The Total Number Of People Over 1.8m Is: " + over18 +
"\nThe Total Number Of People Under 1.6m Is: " + under16);
}
}
答案 0 :(得分:6)
更改为
i = 0; i < height.length
↑ ↑
Java中的数组从零开始。这意味着如果您有一个大小为N
的数组,索引将在[0, N - 1]
范围内,请参阅The Java™ Tutorials - Arrays:
数组中的每个项都称为元素,每个元素都由其数字索引访问。如上图所示,编号从0开始。例如,第9个元素将在索引8处访问。
如果您有兴趣(推荐),请同时浏览JLS - Chapter 10. Arrays:
如果一个数组有
n
个组件,我们说n
是数组的长度;使用整数索引从0到n - 1 (包括0和n - 1 )引用数组的组件。
答案 1 :(得分:3)
问题出在=
循环的i <= height.length
条件
for(i = 1; i <= height.length; i++){
更改为
for(i = 0; i < height.length; i++){
height.length
将为您提供数组和数组索引中的元素数量从0
开始到结束height.length-1
所以在循环的最后一次迭代中,您尝试访问{{1}不存在的数组索引给你height.length
例外。
答案 2 :(得分:3)
for(i = 1; i <= height.length; i++){
heightAsString = JOptionPane.showInputDialog("Please Enter The Height Of Person " + i);
height[i-1] = Double.parseDouble(heightAsString);
if(height[i-1] > 1.8){
over18 += 1;
}
if(height[i-1] < 1.6){
under16 += 1;
}
}
使用height [i-1],因为数组索引从0开始。
答案 3 :(得分:0)
数组始终从零开始索引,因此建议使用它并清理,不要绕过它并按原样使用它。
所以你的代码有两个问题 - 首先是你从一个开始,它不会抛出异常,但这不是好方法。
其次,由于索引从零开始达到了数组的限制(使用索引从0到9访问大小为10的数组)。
您的代码应如下所示:
for(i = 0; i < height.length; i++){
heightAsString = JOptionPane.showInputDialog("Please Enter The Height Of Person " + (i+1));
height[i] = Double.parseDouble(heightAsString);
if(height[i] > 1.8){
over18 += 1;
}
if(height[i] < 1.6){
under16 += 1;
}
}
答案 4 :(得分:0)
问题不在for循环声明中,它在这一行:
height[i] = Double.parseDouble(heightAsString);
你开始你的for循环i值为1,你已经声明你的数组有10个项目,索引从0到9。
因此,当您尝试分配索引值10时,您会收到索引超出范围的错误。
这将解决:
height[i-1] = Double.parseDouble(heightAsString);
答案 5 :(得分:0)
在java数组中索引从零开始。 所以如果你声明一个类似
的数组 double height[] = new double[10];
其索引从零开始,到9结束。
但是在你的代码中,你的索引变量(i)从1开始并以10(height.length)结束。它导致两个问题,所以你缺少数组中的第一个元素(第0个),并试图获得第10个元素(不存在),并且它抛出数组索引超出边界异常。 更改你的for循环,使其从零开始,并以9结束。
for(i = 0; i < height.length; i++)
答案 6 :(得分:0)
更改以下代码行
for(i = 1; i <= height.length; i++){
通过以下方式解决您遇到的两个问题:
for(i = 0; i < height.length; i++){
第一行代码中的问题是您缺少数组的第一个位置(i = 0)。因为每个数组都从0开始,所以你的最后一个索引不能等于数组的长度,但是索引少于1,这就是为什么你有索引超出范围的错误。
为了更好地理解您认为您有以下3个位置数组: [0] [1] [2]。
长度为3,因为分配了3个内存空间。 但是,要访问内存的最后一个空间,您必须使用索引2,而不是3作为长度。由于 i&lt;应该使用height.length 而不是 i&lt; = height.length ,这样你就可以了。 index永远不会是长度,永远不会让索引超出绑定错误。