2016-10-17 4 views
-3

Original: Also für meine Einführung in die Programmierklasse, müssen wir die Primfaktoren eines Bereichs von Zahlen finden, die der Benutzer eingibt (d. H. 59-65). Das Problem bei vielen der Lösungen hier ist, dass sie Dinge verwenden, die wir in der Klasse nicht diskutiert haben, wie Arrays, Fortfahren usw. Es ist eine ziemlich einfache Klasse. Was die Anforderungen betrifft, müssen wir eine PrimFact-Methode/-Funktion verwenden, die wir in der ersten for-Schleife aufrufen. Sie wies uns an, eine Weile und for-Schleife in der Methode zu verwenden, um die Primfaktoren zu bekommen, aber jedes Mal, wenn ich denke, dass ich etwas habe, kommt es nicht richtig heraus. Jede Hilfe wird wirklich geschätzt und mein Code ist unten. Ich brauche wirklich nur Hilfe mit dem Methodenteil mit dem Algorithmus zum Finden der Faktoren.Prime Factoring in Java - Intro-Programmierung

Edit: Hier ist die endgültige Lösung, die ich drehte. Es funktioniert und wird alle Primfaktoren aller Zahlen in einem gegebenen Bereich von Zahlen geben.

import java.util.Scanner; 

public class PrimeFact { 

public static void main(String[] args) { 
    int start, stop; 

    //Get input 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter then two values with the lower value first"); 
    start = input.nextInt(); 
    stop = input.nextInt(); 
    input.close(); 

    //Displays for the start of the loop 
    System.out.println("Starting value (at least two digits): "+start); 
    System.out.println("Ending value (at least two digits): "+stop); 
    System.out.println("Prime factors for numbers between "+start+" and "+stop); 

    //Loop for the prime factors 
    for (int num = start; num <= stop; num++) { 
     primeFact(num); 
    } 
} 

// Method for Prime Factoring 
public static void primeFact(int num) { 
    int divisor = 2; 
    System.out.print(num+" = "); 
    while (num>1) { 
     if ((num%divisor) == 0) { 
      System.out.print(divisor+" x ");  
      num=num/divisor;    
     } else { 
      divisor++; 
     } 
    } 
    System.out.print("1"); 
    System.out.println(); 
    } 
} 
+3

Warum das 'r'-Tag? Was bedeutet es "es kommt nicht richtig heraus?" – ChiefTwoPencils

Antwort

0

Ihre Methode ist ziemlich nah an einer Lösung. aber deine while-Schleife ist ungültig.

merken es so sein sollte:

while(<boolean statement>){ 
    //code here 
} 

ich die Variable verweisen wir „primality“ für als „num“

hier, wie zu überprüfen, für Faktoren, die mit einer while-Schleife werden überprüft:

//remember, num is given to us in the parameters of primeFact(int num). 

boolean isPrime = true; //we are optimistic. 

//we start at 2 because everything is divisible by one 
int posFact = 2; //short for "possible factor" 

while(posFact < num){ //this will start at 2, and go to 1 less than num 
    if(num % posFact == 0){ // "%" gives us remainder 
     isPrime = false; // we now know it's not prime 
     System.out.println("The number " + posFact + " is a factor of " + num + "."); 
    } 
    posFact++; //increments posFact up by 1 
} 

if(isPrime){ //This will only be true if the number is prime 
    System.out.println("The number " + num + " is prime!"); 
} 

Wir können genau die gleiche Sache mit einem tun for-Schleife:

//remember, num is given to us in the parameters. 

boolean isPrime = true; //we are optimistic. 

for(int posFact = 2; posFact < num; posFact++){ //posFact's initialization and incrementation was moved here. 
    if(num % posFact == 0){ // "%" gives us remainder 
     isPrime = false; // we now know it's not prime 
     System.out.println("The number " + posFact + " is a factor of " + num + "."); 
    } 
} 

if(isPrime){ //This will only be true if the number is prime 
    System.out.println("The number " + num + " is prime!"); 
} 
1
public static void primeFact(int num) { 
    System.out.print(num+" = "); 
    for(int i=2;i<num;i++) 
    { 
     if(num%i==0) 
     { 
      if(isPrime(i)) 
      { 
       System.out.println("Prime Factor for "+num+" is:"+i); 
      } 
     } 

    } 
    if(num==2) 
    System.out.println("Prime Factor for "+num+" is:"+num); 
} 
static boolean isPrime(int num){ 
    for(int i=2;i<num;i++) 
    { 
     if(num%i==0) 
     { 
      return false; 
     } 
    } 
    return true; 
    } 

//if u want use while replace the for loop like 
    public static void primeFact(int num) { 
    System.out.print(num+" = ");  

    int i=2; 
    while(i<num) 
    { 
     if(num%i==0) 
     { 
      if(isPrime(i)) 
      { 
       System.out.println("Prime Factor for "+num+" is:"+i); 
      } 
     } 
     i=i+1; 
    } 
    if(num==2) 
    System.out.println("Prime Factor for "+num+" is:"+num); 
} 
static boolean isPrime(int num){ 
    int i=2; 
    while(i<num) 
    { 
     if(num%i==0) 
     { 
      return false; 
     } 
    i=i+1; 
    } 
    return true; 
    } 
+0

Dies wird innerhalb Ihrer Bedingungen funktionieren, hoffe ich – MohanaPriyan