【问题标题】:Calling methods from another class and retrieving their results (Java)从另一个类调用方法并检索其结果(Java)
【发布时间】:2016-03-03 14:51:58
【问题描述】:

我有 2 个类(IterativeVsRecursive 和 Sequence),Sequence 类执行数学运算并将值返回给 IterativeVsRecursive,或者至少这是意图。

我相信我遗漏了一些简单的东西,但我不知道如何使这项工作发挥作用。

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

目的是要有一个显示序列类结果的 GUI。

【问题讨论】:

  • 我应该很清楚,它不允许我在 Sequence 中调用非静态方法,但是如果我通过添加“void”将它们设为静态,那么 computeRecursive 方法会引发错误说这里不允许使用 'void' 类型。
  • 如果您要使用 Class 名称调用它,则需要将其设为静态。 public static int computeIterative(int input)。和public static int computeRecursive (int input)
  • @3kings,回答了这个问题,但现在我的计数器在调用方法时不会增加。我怎样才能增加效率计数器?
  • 您还必须将其更改为静态。 private static int efficiencyCounter

标签: java user-interface recursion iteration


【解决方案1】:

我应该很清楚,它不允许我在 Sequence 中调用非静态方法,但如果我通过添加“void”将它们设为静态,那么 computeRecursive 方法会抛出一个错误,说“void”此处不允许输入

或者,既然方法已经是实例方法,就创建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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多