Java计数器工作不正常
下面是我的Java代码。如果用户输入的数字不等于Java计数器工作不正常,java,loops,methods,counter,Java,Loops,Methods,Counter,下面是我的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){
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;
}
}
public void getInput(){
int i=0;
当(i每次调用方法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(inti){
当(i每次调用方法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(inti){
而(i从内部调用getInput()
会启动递归。递归方法调用完成后,执行将在调用站点恢复,并且(假设没有副作用)与递归调用之前的状态相同
因此,如果用户输入2,则递归调用getInput()
,并且一旦该“内部”执行成功完成(即用户输入1四次),则“内部”将返回,而外部将恢复与之前完全相同的状态(您的计数变量在本地声明!)
我建议不要在这里使用递归,而是使用更简单的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++;
}
}
while(i从内部调用getInput()
会启动递归。递归方法调用完成后,执行将在调用站点恢复,并且(假设没有副作用)与递归调用之前的状态相同
因此,如果用户输入2,则递归调用getInput()
,并且一旦该“内部”执行成功完成(即用户输入1四次),则“内部”将返回,而外部将恢复与之前完全相同的状态(您的计数变量在本地声明!)
我建议不要在这里使用递归,而是使用更简单的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++;
}
}
while(我尝试了这个,但没有解决问题:(getInput(0);
将参数值0传递给if条件内的方法。您需要在调用函数recursevley之前增加i。谢谢。我可以通过删除递归调用来解决这个问题。Prynja要求先删除递归调用,所以我选择他的一个作为答案,但别担心,我有+1您的答案。您的答案很简洁;)@frozenhaart别担心,只要你接受一个答案,我很高兴:)我尝试了这个,但没有解决问题:(getInput(0);
将参数值0传递给if条件内的方法。您需要在调用函数recursevley之前增加i。谢谢。我可以通过删除递归调用来解决这个问题。Prynja要求先删除递归调用,所以我选择他的一个作为答案,但别担心,我有+1您的答案。您的答案很简洁;)@frozenhaart不用担心,只要你接受一个答案,我很高兴:)计数:0错误输入:计数:0计数:1计数:2计数:4计数:0计数:1计数:2计数:3计数:4-这些是我在实现上述代码时得到的结果。while循环运行两次。你删除了getInput()吗
在if条件下调用?看起来您仍在递归到方法中。感谢Prynja!!删除递归调用修复了问题。:)计数:0错误输入:计数:0计数:1计数:2计数:3计数:4计数:0计数:1计数:2计数:3计数:4-这些是我在实现上述代码时得到的结果。while循环运行了两次。是否删除了getInput()
在if条件下调用?看起来您仍在递归到方法中。感谢Prynja!!删除递归调用修复了问题。:)