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