2015-11-30 4 views
1

У меня есть 2 класса (IterativeVsRecursive и Sequence), а класс Sequence выполняет математические действия и возвращает значения IterativeVsRecursive или, по крайней мере, это намерение.Вызов методов из другого класса и получение их результатов (Java)

Я считаю, что мне не хватает чего-то легкого, но я не понимаю, как это сделать.

IterativeVsRecursive Класс:

import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.sound.midi.Sequence; 
import javax.swing.ButtonGroup; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JRadioButton; 
import javax.swing.JTextField; 

public class IterativeVsRecursiveGUI extends JFrame implements ActionListener { 
    private JLabel radioButton1Label = new JLabel(); 
    private JLabel radioButton2Label = new JLabel(); 
    private JLabel inputLabel = new JLabel(); 
    private JLabel resultLabel = new JLabel(); 
    private JLabel efficiencyLabel = new JLabel(); 
    private JLabel computeButtonLabel = new JLabel(); 
    private ButtonGroup radioButtonGroup = new ButtonGroup(); 
    private JRadioButton radioButtonIterative = new JRadioButton("Iterative"); 
    private JRadioButton radioButtonRecursive = new JRadioButton("Recursive"); 
    private JTextField inputField = new JTextField(); 
    private JTextField resultField = new JTextField(); 
    private JTextField efficiencyField = new JTextField(); 
    private JButton computeButton = new JButton(); 
    private int efficiencyCounter; 

    public IterativeVsRecursiveGUI() 

    { 
     super("Project 3"); 
     setSize(300, 200); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     getContentPane().setLayout(new GridLayout(6, 2)); 
     radioButtonGroup.add(radioButtonIterative); 
     radioButtonIterative.setSelected(true); 
     // radioButtonIterative.setText("Iterative"); 
     getContentPane().add(radioButtonIterative); 
     radioButtonGroup.add(radioButtonRecursive); 
     // radioButtonRecursive.setText("Recursive"); 
     getContentPane().add(radioButtonRecursive); 
     inputLabel.setText("Enter number: "); 
     getContentPane().add(inputLabel); 
     getContentPane().add(inputField); 
     computeButton.setText("Compute"); 
     computeButton.addActionListener(this); 
     getContentPane().add(computeButton); 
     resultLabel.setText("Result: "); 
     getContentPane().add(resultLabel); 
     getContentPane().add(resultLabel); 
     resultField.setEditable(false); 
     efficiencyLabel.setText("Efficiency: "); 
     getContentPane().add(efficiencyLabel); 
     getContentPane().add(efficiencyField); 
     efficiencyField.setEditable(false); 
     pack(); 
    } 

    @Override 
    public void actionPerformed(ActionEvent button) { 
     int result; 
     efficiencyCounter = 0; 
     if (radioButtonIterative.isSelected()) { 
      result = Sequence.computeIterative(Integer.parseInt(inputField.getText())); 
     } else { 
      result = Sequence.computeRecursive(Integer.parseInt(inputField.getText())); 
     } 
     resultField.setText(Integer.toString(result)); 
     efficiencyField.setText(Integer.toString(efficiencyCounter)); 
    } 

    public static void main(String[] args) { 
     IterativeVsRecursiveGUI IterativeVsRecursiveGUI = new IterativeVsRecursiveGUI(); 
     IterativeVsRecursiveGUI.setVisible(true); 
    } 
} 

Последовательность Класс:

public class Sequence { 
    private int efficiencyCounter = 0; 

    public int computeIterative(int input) { 
     int answer = 0; 
     if (input == 0) { 
      efficiencyCounter++; 
      answer = 0; 
     } else if (input == 1) { 
      efficiencyCounter++; 
      answer = 1; 
     } else { 
      efficiencyCounter++; 
      int firstTerm = 0; 
      int secondTerm = 1; 
      for (int i = 2; i <= input; i++) { 
       answer = (3 * secondTerm) - (2 * firstTerm); 
       firstTerm = secondTerm; 
       secondTerm = answer; 
      } 
     } 
     return answer; 
    } 

    public int computeRecursive(int input) { 
     int answer = 0; 
     efficiencyCounter++; 
     if (input == 0) { 
      answer = 0; 
     } else if (input == 1) { 
      answer = 1; 
     } else { 
      answer = (3 * computeRecursive(input - 1)) - (2 * computeRecursive(input - 2)); 
     } 
     return answer; 
    } 
} 

Цель состоит в том, чтобы иметь графический интерфейс, который отображает результаты класса последовательностей.

+0

мне было ясно, что она не позволяет мне назвать нестатические методы в последовательности, но если я их сделаю static, добавив «void», тогда метод computeRecursive выдает сообщение об ошибке, указывающее, что тип «void» здесь не разрешен. – dsmracr29

+0

Вам нужно сделать его статическим, если вы собираетесь называть его именем 'Class'. 'public static int computeIterative (int input)'. и 'public static int computeRecursive (int input)' – 3kings

+0

@ 3kings, который отвечает на эту проблему, но теперь мой счетчик не будет увеличиваться при вызове методов. как я могу увеличить коэффициент эффективности? – dsmracr29

ответ

1

мне было ясно, что она не позволяет мне назвать не-статические методы в последовательности, но если я их статическими, добавив «пустота», то computeRecursive метод выдает errror о том, что «пустота» типа здесь не допускается

Или, так как этот метод уже метод экземпляра, создать экземпляр Sequence

@Override 
public void actionPerformed(ActionEvent button) { 
    int result; 
    efficiencyCounter = 0; 

    Sequence sequence = new Sequence(); 
    if (radioButtonIterative.isSelected()) { 
     result = sequence.computeIterative(Integer.parseInt(inputField.getText())); 
    } else { 
     result = sequence.computeRecursive(Integer.parseInt(inputField.getText())); 
    } 
    resultField.setText(Integer.toString(result)); 
    efficiencyField.setText(Integer.toString(efficiencyCounter)); 
} 
Смежные вопросы