1

我正在编写一个GUI程序,该程序将允许用户输入一个数字n,并从那里计算数字序列中的第n项。他们可以选择使用迭代或递归方法。最后,当用户关闭该窗口时,应该创建一个新的文本文档,该文档具有第n项,迭代方法的效率以及前10项中每行的递归方法的效率。效率计数器不会重置

我遇到麻烦的是效率计数器。它应该在使用任一方法时返回效率,但是当我在更改值或切换方法后单击计算按钮时,它会一直添加到效率计数器中,而不是重置。我知道这是因为我的效率变量是静态的,但是我的教授要求我的方法也是静态的。我应该如何解决这个问题?

这是我的GUI文件

//Matt Edwards 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import java.io.*; 
import java.util.*; 

    public class recursiveGUI extends JPanel 
    { 
    int counterEfficiency; 
    private JFrame frame;//The frame 
    private JPanel panel;//The panel 
    private JRadioButton iterative; 
    private JRadioButton recursive; 
    private JLabel enter; 
    private JTextField enter2; 
    private JButton compute; 
    private JLabel result; 
    private JTextField result2; 
    private JLabel efficiency; 
    private JTextField efficiency2; 
    private ButtonGroup radioButtons; 
    public recursiveGUI() 
    { 


     frame=new JFrame("Project 3"); 
     panel=new JPanel(); 
     iterative=new JRadioButton("Iterative"); 
     recursive=new JRadioButton("Recursive"); 
     enter=new JLabel("Enter n"); 
     enter2=new JTextField(""); 
     compute=new JButton("Compute"); 
     result=new JLabel("Results"); 
     result2=new JTextField(""); 
     efficiency=new JLabel("Efficiency"); 
     efficiency2=new JTextField(""); 
     radioButtons=new ButtonGroup(); 

     //frame.addWindowListener(new WindowAdapter(){ 
      // public void windowClosed(WindowEvent e){ 

       // PrintWriter outFile=new PrintWriter(new File("efficienctResults.txt")); 
       //for(int n=0;n<=10;n++) 
       //{ 
        // outFile.println(n+","+)); 
       //} 

      //} 

     //} 


     compute.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent e){ 
       int n; 

       if(iterative.isSelected()) 
       { 
        String input=enter2.getText(); 
        n=Integer.parseInt(input); 
        result2.setText(Integer.toString(Sequence.computeIterative(n))); 
        efficiency2.setText(Integer.toString(Sequence.getEfficiency())); 

       } 

       else if(recursive.isSelected()) 
       { 
        String input=enter2.getText(); 
        n=Integer.parseInt(input); 
        result2.setText(Integer.toString(Sequence.computeRecursive(n))); 
        efficiency2.setText(Integer.toString(Sequence.getEfficiency())); 
       } 

      } 
     }); 


     //Adding the parts together 
     panel.setLayout(new GridLayout(6,2)); 
     radioButtons.add(iterative); 
     radioButtons.add(recursive); 
     panel.add(new JLabel());panel.add(iterative); 
     panel.add(new JLabel());panel.add(recursive); 

     panel.add(enter);panel.add(enter2); 
     panel.add(new JLabel());panel.add(compute); 
     panel.add(result);panel.add(result2); 
     panel.add(efficiency);panel.add(efficiency2); 
     frame.add(panel); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setSize(600,300); 
     frame.setBackground(Color.red); 
     frame.setVisible(true); 

    }   






    //Main method 
    public static void main(String[] args) 
    { 
     recursiveGUI myGUI=new recursiveGUI(); 
    } 
} 

这里是我的方法的文件

public class Sequence 
{ 
static int efficiency; 
public static int computeIterative(int n) 
{ 
    int result = 0; 
    if(n==0) 
    { 
     result=0; 
    } 
    else if(n==1) 
    { 
     result=1; 
    } 
    else 
    { 
     int first=1; 
     int second=0; 
     for(int i=2;i<=n;i++) 
     { 
      efficiency++; 
      result=2*second+first; 
      second=first; 
      first=result; 

     } 
    } 
    return result; 


} 

public static int computeRecursive(int n) 
{ 
    int result=0; 
    efficiency++; 
    if(n==0) 
    { 
     result=0; 
    } 
    else if(n==1) 
    { 
     result=1; 
    } 
    else 
    { 
     result=2*computeRecursive(n-1)+computeRecursive(n-2); 
    } 
    return result; 
} 

public static int getEfficiency() 
{ 
    return efficiency; 
} 

public static void main(String[] args) 
{ 
    computeIterative(5); 
} 

} 

回答

1

您检索之前,这样你可以简单的复位效率:

public static int getEfficiency() 
{ 
    int result = efficiency; 

    efficiency = 0; 

    return result; 
} 
+0

谢谢,那就是诀窍! – WILLO567

+0

我很高兴听到! –