gpt4 book ai didi

java - 计算除数并将字符串输出到 JLabel

转载 作者:行者123 更新时间:2023-12-02 13:21:38 25 4
gpt4 key购买 nike

晚上好,

我正在尝试完成一个涉及 JFrame 的简单学校 GUI 项目,但我坚持正确返回除数,然后使用 Feedback.setText() 部分显示它们。说明如下:

编写一个java代码,创建一个GUI来接受用户的整数作为输入,并创建输入值的所有除数。您的框架应包含以下组件:

JLabel:输入一个整数,求其除数

JTextField:读取用户的输入

JButton:启动进程

JLabel:显示输出<----主要问题

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



public class DivisorException extends JFrame implements ActionListener{

//data fields
final int WIDTH = 300;
final int HEIGHT = 200;
public String divisors;
private int num;
private JButton find = new JButton("Find");
private JLabel question = new JLabel("Enter a number to find all of its divisors");
private JTextField answer = new JTextField(8);
private JLabel feedback = new JLabel("");


//constructor
public DivisorException(){

//call super class constructor --> "Name the Window"
super("Divisor");

//set characteristics
setSize(WIDTH,HEIGHT);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());

//add components
add(question);
add(answer);
answer.addActionListener(this);
add(find);
find.addActionListener(this);
add(feedback);
}


@Override
public void actionPerformed(ActionEvent e){
try{
num = Integer.parseInt(answer.getText());
if(e.getSource().equals(find)){
feedback.setText("The divisors are: " + divisors);

}


}catch(NumberFormatException ex){
feedback.setText("Invalid input. Enter an integer!");
answer.setText("");
}
}


private String divisor(int num){

String divisors = "";
for(int i = 1; i <= num; i++){
if(num % i == 0){

divisors = (i + ", ");
}
}
return divisors;
}

}

最佳答案

您有一些问题

  1. 您没有调用 divisor,也没有将值分配给任何内容,因此 divisors 始终为 null
  2. 您正在隐藏 divisor 中的 divisors 实例字段,因此您分配给它的任何内容都不会反射(reflect)在其他地方
  3. 您不会将循环结果附加到除数,因此您只会获得最后一个值

首先,我将稍微更改除数以演示我的意思...

private String divisor(int num) {

StringJoiner sj = new StringJoiner(", ");
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
sj.add(Integer.toString(i));
}
}
return sj.toString();
}

首先,我删除了 divisors 的声明,并将其替换为 StringJoiner,它更简单,给出了更好的结果,但突出了阴影问题。

接下来,我更新了 actionPerformed 方法,以实际调用 divisor 方法并将结果分配给 divisors

@Override
public void actionPerformed(ActionEvent e) {
try {
num = Integer.parseInt(answer.getText());
if (e.getSource().equals(find)) {
divisors = divisor(num);
feedback.setText("The divisors are: " + divisors);

}

} catch (NumberFormatException ex) {
feedback.setText("Invalid input. Enter an integer!");
answer.setText("");
}
}

关于java - 计算除数并将字符串输出到 JLabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43554570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com