1

我多次检查了这段代码,我真的不明白为什么会出现错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
at qrt2.practice.main(practice.java:34)

我正在使用 Eclips 标准 SDK

代码是:

package qrt2;
import javax.swing.*;

public class practice {

        public static void main(String[] args) {

//creating JOption for the input

            String num1 = JOptionPane.showInputDialog("Enter the first number");
            int x = Integer.parseInt(num1);

            String num2 = JOptionPane.showInputDialog("Enter the first number");
            int y = Integer.parseInt(num2);

            String num3 = JOptionPane.showInputDialog("Enter the first number");
            int z = Integer.parseInt(num3);

            String num4 = JOptionPane.showInputDialog("Enter the first number");
            int v = Integer.parseInt(num4);

            String num5 = JOptionPane.showInputDialog("Enter the first number");
            int h = Integer.parseInt(num5);

            String num6 = JOptionPane.showInputDialog("Enter the first number");
            int k = Integer.parseInt(num6);


//creating array

            int [] ary = new int []{x,y,z,v,h,k};
            int counter;
            for( counter=0;counter<ary.length;counter++);
            System.out.println(counter + " " + ary[counter]);

        }
}
4

4 回答 4

2

for从语句中删除尾随分号

for (counter = 0; counter < ary.length; counter++);
                                                  ^

将分号留在原处counter等于ary.length一旦到达此语句

System.out.println(counter + " " + ary[counter]);

由于数组基于零,这将导致ArrayIndexOutOfBoundsException

counter除非在循环外需要变量,否则将其移动到for语句初始化部分,如下所示

for (int counter=0; counter < ary.length; counter++) {
    System.out.println(counter + " " + ary[counter]);
}

这将使ary[counter]表达式立即显示为编译失败。还要注意大括号给出了范围的清晰度。

于 2013-07-11T13:15:48.207 回答
2
for(counter=0;counter<ary.length;counter++) {
    System.out.println(counter + " " + ary[counter]);
}

删除分号并用一个弯曲的开口括号替换它。然后在输出后关闭大括号。

如果你想应用最佳实践,你还应该在循环中声明你的计数器变量,如下所示:

for(int counter = 0; counter < ary.length; counter++) {}
于 2013-07-11T13:16:46.550 回答
1

从 for 循环中删除分号。

for (counter = 0; counter < ary.length; counter++)
{
}
于 2013-07-11T13:18:34.213 回答
1

您的问题出在以下几行:

for( counter=0;counter<ary.length;counter++);
System.out.println(counter + " " + ary[counter]);

具体来说,其中第一个完成循环,第二个打印一行 - 在循环完成并且计数器增加超出数组长度(从而打破循环)之后。你需要的是在循环内打印,所以这两行应该是:

for( counter=0;counter<ary.length;counter++)
    System.out.println(counter + " " + ary[counter]);

(注意第一行末尾的分号被删除)。或者,为了更清楚:

for( counter=0;counter<ary.length;counter++) {
    System.out.println(counter + " " + ary[counter]);
}
于 2013-07-11T13:19:38.733 回答