-1

请阅读编辑我有一个大学作业,我必须创建多个数组并用用户输入的姓名、地址、以前的年级等填充它们。我创建了一个“for”循环来运行,直到为多个条件给出 8 个正确条目。我的第一个条件就是名字。我添加了代码来停止不正确的条目(在这种情况下是数字和符号,并让它停止空白条目。

int studentno[]=new int[8];          //Array for student number
String studentname[]=new String[8];  //Array for student name
String studentadd[]=new String[8];   //Array for address of student
char studentgrade[]=new char[8];     //Array for previous grade
int studentass1[]=new int[8];        //Array for Computing Programming Assignment1
int studentass2[]=new int[8];        //Array for Computing Programming Assignment2
int studentexam[]=new int[8];        //Array for Computing Programming Exam

for (int i = 0;i<8;i++) {           //Creates for loop that will run 8 time 
                                    //unless an incorrect input is inputted
     studentno[i] = 37000 + (int)(Math.random() * ((38000 - 37000) + 1));     
                                    //Generates random numbers within a range I    
                                    //specified to mimic college system.

     for (int name = 0; name < studentname.length; name++) { 

         studentname[i]  = JOptionPane.showInputDialog(
                       "Please enter Student name. \n You have entered data for "
                        +i+" students so far.");

         Pattern pno = Pattern.compile("[0-9,&%$#@!()*^]"); 
         Matcher mno = pno.matcher(studentname[i]);

         if (mno.find()) {
             JOptionPane.showMessageDialog(null, "Please enter only letters.");
             name--;
         }
         else if (studentname[i] != null && !studentname[i].isEmpty()) {
             JOptionPane.showMessageDialog(null, "You have not entered any data");
             name--;
         }

这在我看来是正确的,但是当我运行程序时,它会完全跳过第二个 for 循环并进入我的下一个条件。(其中不包含一个循环)我将如何解决这个问题?我希望程序在不向 i 添加 1 或继续下一个条件的情况下重新询问条件是否无效。

编辑:只是为了澄清这是我希望实现的最终产品: for loop{ for loop{ 如果名称不正确(包含数字、符号或为空,则询问名称)重新提出问题。

重复 6 个不同的问题 } 重复 8 次,每个问题得到 7 个正确答案

编辑编辑:现在显示完整代码。我的目的是让程序取一个名字,然后进入另一个重复的循环,地址是一个又一个。只有在给出正确的条目时才能继续。

4

1 回答 1

0

您从学生名长度的第二个 for 循环开始,然后您的条件是它是否小于 8。因此,如果所有学生的长度都大于 8,则该循环确实会被忽略。修复此问题以执行您实际希望它执行的操作。

我的猜测是你希望循环看起来像这样:

for (int name = 0; name < studentname.length; name++) {
...
}
于 2013-11-07T17:59:59.067 回答