我有一个调用某些方法的动作侦听器,其中一个方法计算另一个方法中循环运行的次数。我遇到的问题是计数器只是增加了自己(我明白为什么我只是不知道如何解决它)而不是重新设置为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)方法时,我得到一个正确的读数。
答案 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;
}