对名称进行排序并使用JOptionPane来显示输出

时间:2015-12-06 00:44:58

标签: java joptionpane

所以到目前为止我的代码就是这个......

      import javax.swing.*;
        public class TestNo2{
          public static void main(String[] args){
            String[] nameNum = new String[0];
            int numberNames;
            JTextField inputName = new JTextField(5);
              JPanel nameWindow = new JPanel();
                nameWindow.add(new JLabel("How many names would you like to sort?"));
                nameWindow.add(inputName);

            int numNames = JOptionPane.showConfirmDialog(null, nameWindow
                ,"Accept and sort list of students."
                ,JOptionPane.OK_CANCEL_OPTION);
            if(numNames == JOptionPane.OK_OPTION){

              String numNamesS = inputName.getText();
              numberNames = Integer.parseInt(numNamesS);
              nameNum = new String[numberNames];


              for(int counterOne=0;counterOne<nameNum.length;counterOne++){
                for(int counterTwo=1;counterTwo<=nameNum.length;counterTwo++){
                  nameNum[numberNames] = JOptionPane.showInputDialog(null
                    ,"Enter the name of student "+counterTwo
                    ,"Name Input"
                    ,JOptionPane.QUESTION_MESSAGE);
                }   
              }      
            }           
          } 
        }

构建它时没有错误,但是当我运行程序时,我只能输入一个名称,然后发生错误。

这是出现的错误。

线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException:3     在TestNo2.main(TestNo2.java:23)

感谢您抽出宝贵时间阅读本文。

1 个答案:

答案 0 :(得分:0)

for(int counterTwo=1;counterTwo<=nameNum.length;counterTwo++){

应该是:

for(int counterTwo=1;counterTwo < nameNum.length;counterTwo++){

因为表达式counterTwo<=nameNum.length导致数组超出其边界(记住数组的实际长度从零开始并且 1小于您指定的实际长度

因此,如果您有一个定义如下的数组:

someArray[] something = {1,2,3,4,5,6};

something.length的值为6。但实际长度为 5 (计数为:0,1,2,3,4,5)。

为什么你有两个循环来获取名称并添加到String Array?只要一个就够了......

for(int counterOne=0;counterOne<nameNum.length;counterOne++){
    nameNum[counterOne] = JOptionPane.showInputDialog(null
                        ,"Enter the name of student "+(counterOne+1)
                        ,"Name Input"
                        ,JOptionPane.QUESTION_MESSAGE);
}

然后使用您计划使用的任何方法对数组nameNum进行排序。