使用 GUI 界面的 Java 最大公约数 - Int/String/Calculations 的问题

标签 java string int jframe greatest-common-divisor

我正在尝试创建一个最大公约数计算器。我必须为这个项目创建一个 GUI 界面,我认为我这样做是正确的,但是我无法测试它,因为我的计算有问题。

具体来说,我在编译器中收到以下两行错误:

 int x =  xTextField.getText();
 int y = yTextField.getText();

错误是“类型不匹配,无法从 String 转换为 int” 我尝试插入 int x = 0;且 int x = 0;在它之前没有运气。我也尝试过将它们从整数更改为字符串,但是它使一切变得更加困惑。我不确定如何获取我应该使用的文本。

这是我的代码的计算部分:

 public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source == exitButton)
        System.exit(0);
    else if (source == calculateButton) {
        int x =  xTextField.getText();
        int y = yTextField.getText();
        int gcd = greatestCommonDivisor(
                 x, y);
        gcdTextField.getText();
    }

}
private int greatestCommonDivisor(int x, int y) {
    // TODO Auto-generated method stub

    while (x != y) {
        if (x > y) {
            x = x - y;
        } else {
            y = y - x;
        }
    }
    return y;
 }

}

这是我的完整代码:

   package chapt15;

 import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import java.text.*;

 public class FutureValueApp {
public static void main(String[] args) {
    JFrame frame = new GcdFrame();
    frame.setVisible(true);
 }

 }
 class GcdFrame extends JFrame {
public GcdFrame() {
    setTitle("Greatest Common Divisor Finder");
    centerWindow(this);
    setSize(267, 200);
//  setResizable(false);
    setResizable(true);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel panel = new GcdPanel();
    this.add(panel);
}

private void centerWindow(Window w) {
    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension d = tk.getScreenSize();
    setLocation((d.width - w.getWidth()) / 2,
            (d.height - w.getHeight()) / 2);
}
 }

 class GcdPanel extends JPanel implements ActionListener {
private JTextField xTextField, yTextField,
        gcdTextField;
private JLabel xLabel, yLabel, gcdLabel;
private JButton calculateButton, exitButton;

public GcdPanel() {
    // display panel
    JPanel displayPanel = new JPanel();
//   displayPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
    displayPanel.setLayout(new GridLayout(4, 2));
    // payment label
    xLabel = new JLabel("X:");
    displayPanel.add(xLabel);

    // payment text field
    xTextField = new JTextField(10);
    displayPanel.add(xTextField);

    // rate label
    yLabel = new JLabel("Y:");
    displayPanel.add(yLabel);

    // rate text field
    yTextField = new JTextField(10);
    displayPanel.add(yTextField);


    // future value label
    gcdLabel = new JLabel("GCD:");
    displayPanel.add(gcdLabel);

    // future value text field
    gcdTextField = new JTextField(10);
    gcdTextField.setEditable(false);
    gcdTextField.setFocusable(false);
    displayPanel.add(gcdTextField);

    // button panel
    JPanel buttonPanel = new JPanel();
    buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));

    // calculate button
    calculateButton = new JButton("Calculate");
    calculateButton.addActionListener(this);
    buttonPanel.add(calculateButton);

    // exit button
    exitButton = new JButton("Exit");
    exitButton.addActionListener(this);
    buttonPanel.add(exitButton);

    // add panels to main panel
    this.setLayout(new BorderLayout());
    this.add(displayPanel, BorderLayout.CENTER);
    this.add(buttonPanel, BorderLayout.SOUTH);
}

public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();
    if (source == exitButton)
        System.exit(0);
    else if (source == calculateButton) {
        int x =  xTextField.getText();
        int y = yTextField.getText();
        int gcd = greatestCommonDivisor(
                 x, y);
        gcdTextField.getText();
    }

}
private int greatestCommonDivisor(int x, int y) {
    // TODO Auto-generated method stub

    while (x != y) {
        if (x > y) {
            x = x - y;
        } else {
            y = y - x;
        }
    }
    return y;
 }

}

最佳答案

使用这个:

int x =  Integer.parseInt(xTextField.getText());

因为 xTextField.getText() 将返回 String 并且您不能将 String 分配给 int

因此必须使用采用 StringInteger.parseIntString 解析为其等效的 int 值value 并将其解析为 int

int y = yTextField.getText(); 的情况也是如此

此外,如果您希望在 gdc 文本字段中设置计算出的 gdc 下注,那么您应该使用:

int gcd = greatestCommonDivisor(x, y);
gcdTextField.setText(String.valueOf(gcd));

关于使用 GUI 界面的 Java 最大公约数 - Int/String/Calculations 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13559100/

相关文章:

c - 将int写入c中的文件: getting weird character "\00"

java - Android - SQLite 如何按两列获取重复项?

java - 如何使用feign客户端实现下载文件

java - 如何在此 TreeMap 中实现等于和比较

javascript - Jquery 字符串 + 对象 + 字符串

java - 未定义 StringUtils 类型的方法 isEmpty(String)

c - 从 *char 解析 int 的快速简便方法

java - 在使用 OpenSSL 生成的 Android/Java 中加载 RSA key ?

java - 为什么 int exp1 = 14/20*100;等于java中的 '0'吗?

c - 如何从 C/txt 中的 TXT 文件转换二进制文件(仅包括 int/)