Ich schreibe ein GUI-Programm, mit dem ein Benutzer in eine Zahl n eingeben kann, und von dort zählt der n-te Begriff aus einer Folge von Zahlen. Sie haben die Möglichkeit, eine iterative oder rekursive Methode zu verwenden. Wenn der Benutzer schließlich das Fenster schließt, sollte er ein neues Textdokument mit dem n-ten Begriff, der Effizienz der iterativen Methode und der Effizienz der rekursiven Methode für jede Zeile für die ersten zehn Begriffe erstellen.Effizienzzähler wird nicht zurückgesetzt
Worüber ich Probleme habe, ist der Effizienzzähler. Es sollte die Effizienz zurückgeben, wenn man eine der beiden Methoden verwendet, aber wenn ich nach dem Ändern des Werts oder der Umschaltmethoden auf die Schaltfläche "Berechnen" klicke, wird es immer dem Effizienzzähler hinzugefügt, anstatt es zurückzusetzen. Ich weiß, dass dies daran liegt, dass meine Effizienzvariable statisch ist, aber mein Professor machte es zu einer Anforderung, dass meine Methoden ebenfalls statisch sind. Wie soll ich dieses Problem beheben?
Hier ist meine GUI-Datei
//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();
}
}
Und hier ist die Datei für meine Methoden
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);
}
}
Dank , das hat den Trick gemacht! – WILLO567
Ich bin froh, das zu hören! –