簡體   English   中英

使用 GUI (swing/awt) 的素數分解

[英]Prime factorization using 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:我改變了操作部分

你的 Swing 部分很好。 如果你只是嘗試執行

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

你得到7,所以問題出在這部分,你應該看看這里

問題出在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;
  }
}
public static final IntFunction<String> getPrimeFactorsAsString = num -> {
    List<Integer> res = new ArrayList<>();

    for (int i = 2, sqrt = (int)Math.sqrt(num); i <= sqrt; i++) {
        while (num % i == 0) {
            res.add(i);
            num /= i;
        }
    }

    return res.stream().map(String::valueOf).collect(Collectors.joining(" "));
};

演示

System.out.println(getPrimeFactorsAsString.apply(56));  // 2 2 2 7
System.out.println(getPrimeFactorsAsString.apply(660)); // 2 2 3 5 11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM