以下是我的Java代码。如果用户输入的数字不等于1
,则会再次调用方法getInput()
。
public void getInput(){
int i=0;
while(i<=4){
result[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter Result (1 = pass, 2 = fail)"));
int res = result[i];
if(res!=1){
JOptionPane.showMessageDialog(null,"Wrong input, please try again!");
System.out.println("Wrong Input:" + res);
getInput();
}
System.out.println("count:"+i);
i=i+1;
}
}
以下是代码
产生的结果getInput()
。问题是计数器工作不正常。有人可以帮我解决这个问题,为什么会这样?
答案 0 :(得分:4)
每次调用方法getInput()
设置i = 0
时,请尝试将计数器作为方法参数传递:
public void getInput(int i){
while(i<=4){
result[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter Result (1 = pass, 2 = fail)"));
int res = result[i];
if(res!=1){
JOptionPane.showMessageDialog(null,"Wrong input, please try again!");
System.out.println("Wrong Input:" + res);
getInput();
}
System.out.println("count:"+i);
i=i+1;
}
}
我不会为此目的使用递归调用,为什么不这样做:
public void getInput(){
while(i<=4) && ((res = Integer.parseInt(JOptionPane.showInputDialog("Enter Result (1 = pass, 2 = fail)"))) != 1){
JOptionPane.showMessageDialog(null,"Wrong input, please try again!");
System.out.println("Wrong Input: " + res);
i = i + 1;
}
System.out.println("count:" + i);
}
}
答案 1 :(得分:1)
从内部调用getInput()
开始递归。在递归方法调用完成后,执行将在调用站点恢复并且(假设没有副作用)具有与递归调用之前相同的状态。
因此,如果您的用户输入2,则递归调用getInput()
,一旦此“内部”执行成功完成(即用户输入1次4次),“内部”getInput()
将返回并且外部的一个恢复与之前完全相同的状态(你的计数变量在本地声明!)。
我建议不要在这里使用递归,而是使用更简单的if / else构造并更改变量i
以维持状态:
while (i <= 4) {
// input code here
if (res != 1) {
// fail message for user here
i = 0;
} else {
// success message for user here
i++;
}
}
请注意,此方法可能会使用户感到沮丧,应添加取消执行的选项(: