Java ArrayIndexOutOfBounds
Java ArrayIndexOutOfBounds
目前正在做一个学生项目。我想找出最大的数字并通过冒泡排序对其进行排序,该数字是从 JLabel 解析的,但我每次都会收到此错误。这是一个代码片段:
JLabel[] wuerfelsummen = new JLabel[7];
wuerfelsummen[0] = player1_wuerfelsumme;
wuerfelsummen[1] = player2_wuerfelsumme;
wuerfelsummen[2] = player3_wuerfelsumme;
wuerfelsummen[3] = player4_wuerfelsumme;
wuerfelsummen[4] = player5_wuerfelsumme;
wuerfelsummen[5] = player6_wuerfelsumme;
public int ermittleGewinner(JLabel[] w)
{
int temp;
int[] zahlen = new int[w.length];
for(int i=0; i<=zahlen.length; i++)
{
if(w[i].getText() == null)
{
zahlen[i] = 99999999;
}
else
{
zahlen[i] = Integer.parseInt(w[i].getText());
}
}
for(int i=1; i<zahlen.length; i++)
{
for(int j=0; j<zahlen.length-i; j++)
{
if(zahlen[j]>zahlen[j+1])
{
temp=zahlen[j];
zahlen[j]=zahlen[j+1];
zahlen[j+1]=temp;
}
}
}
for(int i=0; i<=zahlen.length; i++)
这是不正确的,因为数组是从 0 开始索引的,这意味着它们从 0 到长度 1。
改为
for(int i=0; i<zahlen.length; i++)
有趣的是,你的其他循环避免了这个陷阱,尽管你以后仍然需要小心 j+1
。确保这永远不会 >= zahlen.length
.
您可以简单地将 j
初始化为 1 而不是 0,然后将所有出现的 j
替换为 j-1
并将 j+1
替换为 j
将 for 循环中的 "i<=zahlen.length" 更改为 "i < zahlen.length"。
记住数组是 0 索引的,因此您正尝试使用您当前使用的“<=”方法访问一个索引超出数组大小的元素
第二个循环应该从 i=0 而不是 i=1 开始。通过使用 i=1,您将再次尝试访问超过数组大小的一个元素
ArrayIndexOutOfBounds 当代码试图访问不存在的数组元素时出现异常。在您的代码中,由于您要额外循环一次 for(int i=0; i<=zahlen.length; i++)
,因此您会收到此异常。保持 FOR 循环为 for(int i=0; i<zahlen.length; i++)
您不仅要检查 zahlen[i]
,还要检查 w[i]
,因为您正在循环 zahlen
的长度,而且 w
可能是比 zahlen
.
更短的长度
目前正在做一个学生项目。我想找出最大的数字并通过冒泡排序对其进行排序,该数字是从 JLabel 解析的,但我每次都会收到此错误。这是一个代码片段:
JLabel[] wuerfelsummen = new JLabel[7];
wuerfelsummen[0] = player1_wuerfelsumme;
wuerfelsummen[1] = player2_wuerfelsumme;
wuerfelsummen[2] = player3_wuerfelsumme;
wuerfelsummen[3] = player4_wuerfelsumme;
wuerfelsummen[4] = player5_wuerfelsumme;
wuerfelsummen[5] = player6_wuerfelsumme;
public int ermittleGewinner(JLabel[] w)
{
int temp;
int[] zahlen = new int[w.length];
for(int i=0; i<=zahlen.length; i++)
{
if(w[i].getText() == null)
{
zahlen[i] = 99999999;
}
else
{
zahlen[i] = Integer.parseInt(w[i].getText());
}
}
for(int i=1; i<zahlen.length; i++)
{
for(int j=0; j<zahlen.length-i; j++)
{
if(zahlen[j]>zahlen[j+1])
{
temp=zahlen[j];
zahlen[j]=zahlen[j+1];
zahlen[j+1]=temp;
}
}
}
for(int i=0; i<=zahlen.length; i++)
这是不正确的,因为数组是从 0 开始索引的,这意味着它们从 0 到长度 1。
改为
for(int i=0; i<zahlen.length; i++)
有趣的是,你的其他循环避免了这个陷阱,尽管你以后仍然需要小心 j+1
。确保这永远不会 >= zahlen.length
.
您可以简单地将 j
初始化为 1 而不是 0,然后将所有出现的 j
替换为 j-1
并将 j+1
替换为 j
将 for 循环中的 "i<=zahlen.length" 更改为 "i < zahlen.length"。
记住数组是 0 索引的,因此您正尝试使用您当前使用的“<=”方法访问一个索引超出数组大小的元素
第二个循环应该从 i=0 而不是 i=1 开始。通过使用 i=1,您将再次尝试访问超过数组大小的一个元素
ArrayIndexOutOfBounds 当代码试图访问不存在的数组元素时出现异常。在您的代码中,由于您要额外循环一次 for(int i=0; i<=zahlen.length; i++)
,因此您会收到此异常。保持 FOR 循环为 for(int i=0; i<zahlen.length; i++)
您不仅要检查 zahlen[i]
,还要检查 w[i]
,因为您正在循环 zahlen
的长度,而且 w
可能是比 zahlen
.