有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用GUI的java素数分解(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:我已经更改了操作部分


共 (2) 个答案

  1. # 1 楼答案

    你的挥杆部分很好。如果你只是想执行

     int a = 56;
        for(int i = 2; i< a; i++) {
            while (a % i == 0) {
                a = a / i;
            }
        }
        System.out.println(a);
    

    你得到7,所以问题在这部分,你应该看看这里

  2. # 2 楼答案

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