2014-03-26 68 views
0

這些指令我有一個程序:質因子分解方案的Java

編寫一個程序,要求用戶一個整數(使用JOptionPane的),然後打印出它的質數分解。

例如,當用戶輸入150時,程序應打印「素數分解150:2 3 5 5」。

使用帶有方法nextFactor和hasMoreFactors(謂詞方法)的FactorGenerator類。實例字段應該是數字和因子。 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

您正在使用變量數的中間值重新分配hasMoreFactors()方法中的字符串變量primeFactors。 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++
把這個直接放到循環的結尾,並詢問在這一輪中是否找到沒有因素。