首页 > 解决方案 > 使用 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:我改变了操作部分

标签: javaswingjpanelawtjtextarea

解决方案


问题在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;
  }
}

推荐阅读