I'm writing a GUI program that will allow a user to enter in a number n, and from there, will count the nth term from a sequence of numbers. They have the option to use an iterative or recursive method. Finally, when the user closes the window, it should create a new text document that has the nth term, the efficiency of the iterative method, and the efficiency of the recursive method for each line for the first ten terms.
What I'm having trouble with is the efficiency counter. It's supposed to return the efficiency when using either method, but when I click on the compute button after either changing the value or switching methods, it keeps getting added to the efficiency counter, instead of resetting. I know that it is because my efficiency variable is static, but my professor made it a requirement that my methods be static as well. How should I fix this problem?
Here's my GUI file
//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();
}
}
And here's the file for my methods
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);
}
}
You can simply reset the efficiency before you retrieve it, like that:
public static int getEfficiency()
{
int result = efficiency;
efficiency = 0;
return result;
}