繁体   English   中英

基于用户输入的数组,错误?

[英]array based on user input, error?

我几次检查了这段代码,我真的不明白为什么会收到错误消息:

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]);

        }
}

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]表达式立即显示出编译失败。 注意,花括号也使范围清晰。

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

删除分号,并用卷曲的开口括号代替。 然后在输出后关闭大括号。

而且,如果您想运用最佳实践,还应该在循环内声明计数器变量,如下所示:

for(int counter = 0; counter < ary.length; counter++) {}

从for循环中删除分号。

for (counter = 0; counter < ary.length; 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]);

(请注意,在第一行的末尾删除了分号)。 或者,更明确地说:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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