Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java计数器工作不正常_Java_Loops_Methods_Counter - Fatal编程技术网

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){

下面是我的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;
    }
}
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!!删除递归调用修复了问题。:)