1

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); 
} 

} 

Antwort

1

Sie einfach die Effizienz zurücksetzen, bevor Sie es abrufen, wie folgt aus:

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

    efficiency = 0; 

    return result; 
} 
+0

Dank , das hat den Trick gemacht! – WILLO567

+0

Ich bin froh, das zu hören! –

Verwandte Themen