2014-03-26 5 views
0

Это инструкция у меня есть для программы:Премьер факторизации Программа Java

Написать программу, которая запрашивает у пользователя целое (используя JOptionPane), а затем выводит его разложение на простые множители.

Например, когда пользователь вводит 150, программа должна печатать «Первичная факторизация 150: 2 3 5 5».

Используйте класс FactorGenerator с методами nextFactor и hasMoreFactors (метод предиката). Поля экземпляров должны быть числом и коэффициентом. Метод hasMoreFactors должен инициализировать коэффициент до 2 и использовать цикл while для увеличения коэффициента до тех пор, пока коэффициент не разделится на число равномерно (в этом случае hasMoreFactors возвращает значение true), или коэффициент становится слишком большим (в этом случае hasMoreFactors возвращает значение false).

В FactorGeneratorTest пользователю должно быть разрешено вводить столько целых чисел, сколько он пожелает. Вход должен продолжаться до тех пор, пока не будет нажата кнопка отмены. Предполагается, что целые числа, введенные в 30, 100, 2310 и 27225.

Вот мой FactorGenerator класс до сих пор:

package primeFactorization; 

public class FactorGenerator { 

public FactorGenerator(double input) { 
    number = input; 
} 

public String hasMoreFactors() { 
    factor = 2; 
    boolean loop = true; 
    primeFactors = "Prime Factors are: "; 
    while(loop) { 
     if(number % factor == 0) { 
      number = number/factor; 
      primeFactors = (number + ", "); 
      } 
      if(factor > number) { 
       loop = false; 
      } 
      if(number % factor != 0) { 
       factor++; 
      } 
      if(number < 2) { 
       loop = false; 
      } 
     } 
     return primeFactors; 
    } 

    private String primeFactors; 
    private boolean hasFactor; 
    private double number; 
    private double factor; 
} 

А вот мой тестовый класс:

package primeFactorization; 

import javax.swing.JOptionPane; 

public class FactorGeneratorTest 
    { 
    public static void main(String[]args) { 
     String input = JOptionPane.showInputDialog("Enter a number. "); 
     Double num = Double.parseDouble(input); 

     FactorGenerator factors = new FactorGenerator(num); 

    System.out.println(factors.hasMoreFactors()); 
} 
} 

Как мне сделать эту работу?

+0

Положительно дубликат: http://stackoverflow.com/questions/12570099/java-display-the-prime-factorization-of-a-number – Frakcool

+3

Что именно НЕ работает до сих пор? – kiruwka

+0

Насколько велика цифра, которую вы разрешаете? В частности, насколько велики будут основные факторы? Вы можете разделить все числа под 10^6 или около того и сохранить результаты за довольно небольшой промежуток времени. Большие числа требуют факторизации их индивидуально и могут потребовать решения специализированных алгоритмов в разумные сроки. – Nuclearman

ответ

1

Вы переназначаете строковые переменные primeFactors в hasMoreFactors() с промежуточными значениями номера переменной. primeFactors следует конкатенировать со значениями простого коэффициента (т.е. значения переменного фактора). В hasMoreFactors() должно быть, как показано ниже:

public String hasMoreFactors() { 
     factor = 2; 
     boolean loop = true; 
     primeFactors = "Prime Factors are: "; 
     while (loop) { 
      if (number % factor == 0) { 
       number = number/factor; 
       primeFactors += (factor + ", "); 
      } 
      if (factor > number) { 
       loop = false; 
      } 
      if (number % factor != 0) { 
       factor++; 
      } 
      if (number < 2) { 
       loop = false; 
      } 
     } 
     return primeFactors; 
    } 
0

Пример: вход 35, вы начинаете с коэффициентом 2, но 35 % 2 = 1 так что вы никогда не прийти к factor++.
Поместите это прямо в конец цикла и спросите, не было ли в раунде никакого фактора.

Смежные вопросы