计算除数并将字符串输出到 JLabel
Calculating Divisors & Outputting a String to a JLabel
晚上好,
我正在尝试完成一个涉及 JFrame 的简单学校 GUI 项目,但我一直坚持正确返回除数,然后使用 feedback.setText() part.The 指令显示它们如下:
编写 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;
}
}
您有一些问题
- 您没有调用
divisor
,也没有给任何东西赋值,所以 divisors
总是 null
- 您正在隐藏
divisor
中的 divisors
实例字段,因此您分配给它的任何内容都不会反映在 的其他地方
- 您没有将循环的结果附加到
divisors
,因此您只会获得最后一个值
首先,我将稍微更改 divisor
以证明我的意思...
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("");
}
}
晚上好,
我正在尝试完成一个涉及 JFrame 的简单学校 GUI 项目,但我一直坚持正确返回除数,然后使用 feedback.setText() part.The 指令显示它们如下:
编写 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;
}
}
您有一些问题
- 您没有调用
divisor
,也没有给任何东西赋值,所以divisors
总是null
- 您正在隐藏
divisor
中的divisors
实例字段,因此您分配给它的任何内容都不会反映在 的其他地方
- 您没有将循环的结果附加到
divisors
,因此您只会获得最后一个值
首先,我将稍微更改 divisor
以证明我的意思...
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("");
}
}