2014-03-26 5 views
0

다음은 내가 프로그램에있는 명령은 다음과 같습니다소인수 분해 프로그램 자바

정수에 대한 사용자 요청하는 프로그램을 작성 후 (JOptionPane에 사용)와 자사의 소인수 분해를 출력합니다.

예를 들어 사용자가 150을 입력하면 프로그램은 "Prime factorization of 150 : 2 3 5 5"를 인쇄해야합니다.

메서드 nextFactor 및 hasMoreFactors (조건부 메서드)를 사용하여 FactorGenerator 클래스를 사용합니다. 인스턴스 필드는 숫자와 요소 여야합니다. hasMoreFactors 메서드는 factor를 2로 초기화하고 factor를 number로 균등하게 나눌 때까지 while 루프를 사용하여 factor를 증가시켜야합니다.이 경우 hasMoreFactors는 true 값을 반환하고 factor는 너무 커집니다 (hasMoreFactors는 false 값을 반환합니다).

FactorGeneratorTest에서 사용자는 원하는만큼의 정수를 입력 할 수 있어야합니다. 취소 버튼을 누를 때까지 입력을 계속해야합니다. 그것은 당신이 입력 한 정수는 것이 좋습니다 30, 2310 (100), 그리고 여기에

27225. 지금까지 내 FactorGenerator 클래스입니다 :

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()); 
} 
} 
: 여기

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

그리고 내 테스트 클래스

이 작업을 수행하려면 어떻게해야합니까?

+0

위의 내용은 다음과 같습니다. http://stackoverflow.com/questions/12570099/java-display-the-prime-factorization-of-a-number – Frakcool

+3

정확히 무엇이 지금까지 작동하지 않습니까? – kiruwka

+0

당신은 얼마나 큰 숫자를 허용하고 있습니까? 특히, 주요 요인은 얼마나 클 것입니까? 10^6 이하의 모든 수를 나누어서 결과를 상당히 적은 시간 안에 저장할 수 있습니다. 더 큰 수의 경우에는 개별적으로 인수 분해해야하며 합리적인 시간 내에 해결하기 위해 특수화 된 알고리즘이 필요할 수 있습니다. – Nuclearman

답변

1

hasMoreFactors() 메소드의 String 변수 primeFactors를 변수 number의 중간 값으로 재 지정하고 있습니다. 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++에 오지.
이 지시문을 루프의 끝 부분에 놓고 라운드에 아무런 요소도 없는지 묻습니다.