如何为循环计数器实现重置?

时间:2016-02-23 07:39:57

标签: java

我有一个调用某些方法的动作侦听器,其中一个方法计算另一个方法中循环运行的次数。我遇到的问题是计数器只是增加了自己(我明白为什么我只是不知道如何解决它)而不是重新设置为0.

这是我的动作监听器代码。

    public double computeIterative(double n) throws InvalidInput {            
        int a=1, b=2;
        int result = 0;
        if (n>=0) {
            if(n==0)return 0;
            if(n==1)return 1;
            if(n==2)return 2;
            for(int i = 3; i <= n; i++) {                    
                result = a+(2*b);
                a=b;
                b = result;                    
                this.getEfficiency();                    
            }                
        }   else{
                throw new InvalidInput();
        }
        return result;
    }

调用方法并设置文本的ActionListener:

    public void actionPerformed(ActionEvent e) {
        int n = Integer.parseInt(nField.getText());
        //Try Catch for Iterate Radio Button
        if (iterateBtn.isSelected()){
            try {                
            double result = sequence.computeIterative(n);
    int efficiency = sequence.getEfficiency();
            rField.setText(Double.toString(result));
            eField.setText(Integer.toString(efficiency));
            }
            catch (InvalidInput ex) {
            }
        }

getEfficiency方法计算computeIterative方法中的循环运行次数,然后将其设置为textField。

这是我的getEfficiency方法:

    public int getEfficiency() {
        efficiency++;            
        return efficiency;
    }

现在很明显,这只会不断增加,我相信我对解决方案的看法太难了,但我无法弄明白。

基本上,在try,catch之后,我需要将效率设置为0,以便下次调用computeIterative(n)方法时,我得到一个正确的读数。

2 个答案:

答案 0 :(得分:2)

您只需添加方法resetEfficiency()

public int resetEfficiency() {
     efficiency = 0;
}

然后在computeIterative()

的开头调用它
public double computeIterative(double n) throws InvalidInput {
    this.resetEfficiency();
    //rest of code goes here
    //....  
}

(当然我假设这不是多线程或其他任何东西)。

答案 1 :(得分:1)

 public double computeIterative(double n) throws InvalidInput {            
        int a=1, b=2;
        int result = 0;
         this.resetEfficiencyCounter(); //Call Reset if Number Got Invalid.
        if (n>=0) {
            if(n==0)return 0;
            if(n==1)return 1;
            if(n==2)return 2;
            for(int i = 3; i <= n; i++) {                    
                result = a+(2*b);
                a=b;
                b = result;                    
                this.getEfficiency();                    
            }                
        }   else{
                throw new InvalidInput();
        }
        return result;
    }

添加名为resetEfficiencyCounter()的新功能。

private void resetEfficiencyCounter(){
   this.efficiency = 0;
}