简体   繁体   中英

Prime factorization using GUI (swing/awt)

This code uses Swing and awt to compute prime factorization, the code works, but it shows only one prime factor, for example: if i compute 56 the answer is just 7, how can i fix it? thanks in advance

        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);
                }
            }
        }
    });

Edit 1: i have changed the operation part

Your Swing part is fine. If you just try to execute

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

you get 7,so the problem is in this part, you shoul look over here

Problem is in the while loop. It is not accumulating the factors. Try this getPrimeFactors() in this sample program.

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(" "));
};

Demo

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM