1

Я пишу программу GUI, которая позволит пользователю вводить число n, а оттуда будет считать n-й член из последовательности чисел. Они имеют возможность использовать итеративный или рекурсивный метод. Наконец, когда пользователь закрывает окно, он должен создать новый текстовый документ, который имеет n-й член, эффективность итеративного метода и эффективность рекурсивного метода для каждой строки для первых десяти терминов.Счетчик эффективности не будет сброшен

У меня возникли проблемы с счетчиком эффективности. Он должен возвращать эффективность при использовании любого метода, но когда я нажимаю кнопку вычисления после изменения значения или методов переключения, он продолжает добавляться к счетчику эффективности вместо сброса. Я знаю, что это потому, что моя переменная эффективности статична, но мой профессор сделал это требование, чтобы мои методы были также статичными. Как мне исправить эту проблему?

Вот мой 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

Я рад это слышать! –

 Смежные вопросы

  • Нет связанных вопросов^_^