Java如何在条件为假时继续当前循环

时间:2017-02-03 11:47:22

标签: java

我遇到一个问题,即每当输入验证不正确时,它会突破我当前的循环并继续下一个方法,任何人都可以帮助我,这样当条件为假时它会重新询问相同的输入,直到满足条件。这是我的方法类的源代码

public class Student {
    public int gradePt;
    public int i;
    public int credSum = 0;
    public double gradeCredSum = 0;
    public double gpa;
    String [] moduleName;
    String [] moduleGrade;
    int [] moduleCred ;
    Module[] modules;

    public void createModules(){

        getModuleNo();

         modules = new Module[i];
         moduleName = new String[i];
         moduleGrade = new String[i];
         moduleCred = new int[i];

         getModule();
         getGrade();
         getCred();

    for (int j = 0; j < modules.length; j++) {


       modules[j] = new Module(moduleName[j],moduleCred[j],moduleGrade[j]);
       }
    }

    public void getModuleNo(){
        do{
     String input  = JOptionPane.showInputDialog(null,
             "How many modules did you take?","Input");
           int a  = Integer.parseInt(input);
           if (a<1 || a>8){
               JOptionPane.showMessageDialog(null, 
                       "Invalid input please enter a number greater than 0",
                       "Error",JOptionPane.ERROR_MESSAGE);
               break;
    }      i = a;  
        }while(i<1 || i>8);  

}
    public void getModule(){
        for (int i=0;i<moduleName.length;i++){
             String input = JOptionPane.showInputDialog(null,
                    "Enter the name of module #"+(i+1));
             moduleName[i] = input;
             if (input == ""){
                 JOptionPane.showMessageDialog(null,
                         "Invalid input, module name cannot be blank","Error",JOptionPane.ERROR_MESSAGE);
                 break;
       }
    }

    }
    public void getGrade(){
        for (int i=0;i<moduleGrade.length;i++){
            String input = JOptionPane.showInputDialog(null,
                    "Enter grade (A,B,C,D,F) for module #"+(i+1));
             moduleGrade[i] = input;
             if (!"A".equals(input) && !"B".equals(input) && !"C".equals(input) && !"D".equals(input) &&
                     !"F".equals(input) && !"a".equals(input) && !"b".equals(input) && input!="c" &&
                     !"d".equals(input) && !"f".equals(input)){
                 JOptionPane.showMessageDialog(null,
                         "Invalid input!"+"\n"+"Please enter A,B,C,D or F","Error",JOptionPane.ERROR_MESSAGE);
                 break;
             }
             moduleGrade[i] = input;
      }
    }
    public void getCred(){

        for (int i=0;i<moduleCred.length;i++){
            String input = JOptionPane.showInputDialog(null,
                    "Enter credit units for module #"+(i+1));
             moduleCred[i] = Integer.parseInt(input);
             if (moduleCred[i]<1 || moduleCred[i]>8){
                 JOptionPane.showMessageDialog(null,
                         "Invalid input!"+"\n"+"Please enter a number form 1 to 8","Error",JOptionPane.ERROR_MESSAGE);
                 break;
             }

        }
    }

3 个答案:

答案 0 :(得分:1)

这是一个常见的过程。你一直要求输入,每次检查输入都有效。

伪代码:

 df$NUM <- with(df, ave(ID, ID, DATE, FUN =seq_along))

答案 1 :(得分:0)

我计算了四种使用JOptionPane来收集用户输入的getter方法。在下面的代码片段中,我重构了getGrade(),以便它继续提示用户输入给定的模块等级,直到收到有效输入。

虽然此处未给出其他三种方法的修复,但您可以尝试遵循类似的模式。

public void getGrade() {
    String invalidInputMsg = "Invalid input!" + "\n" + "Please enter A,B,C,D or F";
    for (int i=0; i < moduleGrade.length; i++) {
        do {
            String enterGradeMsg = "Enter grade (A,B,C,D,F) for module #" + (i+1)";
            String input = JOptionPane.showInputDialog(null, enterGradeMsg);
            if (input.length() == 1 &&
                "ABCDF".indexOf(input.toUpperCase().charAt(0)) != -1) {
                moduleGrade[i] = input;
                break;
            }
            else {
                JOptionPane.showMessageDialog(null, invalidInputMsg, "Error",
                                              JOptionPane.ERROR_MESSAGE);
            }
        } while(true);
    }
}

如果输入有效,那么break将结束do循环,i循环中将使用for的下一个值,如果它是可用。如果输入无效,则do循环将继续,并再次提示用户输入。

答案 2 :(得分:0)

程序中有许多循环要求输入。所以这里有一些问题的代码

class SomeStrangeClass extends Component { 
  constructor(props){
    super(props);
    this.state = {
      confirmError:[],
    };
    this.baseState = this.state;
  }
  componentWillReceiveProps(nextProps){
    console.log(this.state); //here i can have, for example, 3 confirmErrors...
    console.log(this.baseState); // here i still have an empty array
    this.setState(this.baseState);
  }
...some strange code
}