2013-04-11 102 views
1

以下是我的Java代码。如果用户输入的数字不等于1,则将再次调用方法getInput()Java计数器无法正常工作

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; 
    } 
} 

下面是结果由代码产生

  • 计数:0 < - 启动从计数0
  • 数:1
  • 错误输入:2 < - 输入错误输入和呼叫再次使用方法getInput()
  • 计数:0 < - 启动从计数0
  • 数:1
  • 计数:2
  • 计数:3
  • 计数:4
  • 计数:2 < - 再次从2
  • 启动
  • 计数:3
  • 计数:4

问题是计数器无法正常工作。有人可以帮助我解决这个问题,为什么会发生这种情况?

回答

1

从内部调用getInput()开始递归。递归方法调用完成后,执行将在调用站点恢复,并且(假设没有副作用)具有与递归调用之前相同的状态。

因此,如果用户输入2调用getInput()递归,一旦这种“内部”成功执行(即用户输入1分四次),“内部” 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++; 
    } 
} 

注意,此方法可能妨碍用户,选择取消执行应该被添加(:

+0

数:0 输入错误: 数:0 数:1 数:2 数:3 计数:4 count:0 count:1 count:2 count:3 count:4 - 这是我在实现上述代码时得到的结果。 while循环运行两次。 – 2013-04-11 10:31:09

+0

您是否在if条件中删除了'getInput()'调用?它看起来像你还在递归到你的方法。 – Pyranja 2013-04-11 10:35:09

+0

谢谢Prynja!删除递归调用修复了这个问题。 :) – 2013-04-11 10:49:33

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);   
    } 
} 
+0

我试过这个,它并没有解决问题:('getInput(0);'传递参数值0到if条件中的方法 – 2013-04-11 10:25:14

+0

你需要在调用之前增加i功能recursevley – CloudyMarble 2013-04-11 10:35:53

+0

我没有给你,你能编辑代码并显示吗? – 2013-04-11 10:41:33