java - 使用 GUI 的素数分解(swing/awt)
问题描述
此代码使用 Swing 和 awt 来计算素数分解,该代码有效,但它只显示一个素数因子,例如:如果我计算 56,答案只是 7,我该如何解决?提前致谢
calculate6.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// Get values from text fields
try {
int a = Integer.parseInt(input1.getText());
result.setText(String.valueOf(a + " "));
for (int i = 2; i <= a; i++) {
while (a % i == 0) {
result.setText(String.valueOf(i + " "));
// System.out.println(i + " ");
a = a / i;
}
}
if (a < 1)
result.setText(String.valueOf(a + " "));
// System.out.println(a + " ");
}
catch (Exception f) {
JOptionPane.showMessageDialog(rootPane, "ERROR: " + (f.getMessage()));
}
String aField = input1.getText();
if (e.getSource() == calculate6) {
if ("".equals(aField)) {
String emptyFieldWarning;
emptyFieldWarning = "One field is empty!";
JOptionPane.showMessageDialog(rootPane, emptyFieldWarning);
}
}
}
});
编辑1:我改变了操作部分
解决方案
问题在while
循环中。它不是在累积因素。getPrimeFactors()
在这个示例程序中试试这个。
import java.util.*;
public class PrimeFactors {
public static void main(String[] args) {
System.out.println("56 -> " + PrimeFactors.getPrimeFactors(56));
System.out.println("30 -> " + PrimeFactors.getPrimeFactors(30));
System.out.println("154 -> " + PrimeFactors.getPrimeFactors(154));
}
public static List<Integer> getPrimeFactors(int input) {
List<Integer> factors = new ArrayList<>();
for (int i = 2; i <= input; i++) {
while (input%i == 0) {
input = input/i;
factors.add(i);
}
}
return factors;
}
}
推荐阅读
- bash - 如何使用 bash 在文本文件中进行命令替换
- excel - Excel 公式中的 HLOOKUP
- esp8266 - 我可以在循环中更改 mDNS 主机名吗?
- module - 如何阻止 Pycharm 用不同的路径重新打开/复制我的模块文件?和“撤消从磁盘重新加载”
- javascript - 在 bokeh 和 slickgrid 中链接选择
- qt - Qt 事件覆盖 QEvent::KeyRelease 只发生一次
- dialogflow-es - @sys.person - 提取名字和姓氏
- python - Python Xpath 难题。我可以选择链接,尝试点击,不行
- javascript - 如何防止我的内容区域移动
- typescript - 无法从导入的类中导入函数