2013-10-22 12 views
5

Wie einige andere Fragen in diesem Forum gefragt haben, wie würden Sie gehen, um die Faktoren einer Zahl zu finden.Factoring eine Nummer in Java - Hausaufgaben

Hinweis: Ich habe versucht, zu verstehen, was andere Leute geschrieben haben, wenden Sie sich bitte aufwärmen nicht bereits gegebenen Antworten

Mein Code von Rechts wegen jetzt funktioniert, aber zum Beispiel die Zahl 6 zurückkehrt: 6.0 einkalkuliert von 1,0 6.000 6,0 von 2,0 einkalkuliert ist 3.000 6,0 einkalkuliert um 3,0 2,000 6,0 von 4,0 einkalkuliert ist 1.500 6,0 von 5,0 einkalkuliert ist 1,200 6,0 von 6,0 einkalkuliert ist 1.000

gibt es eine Möglichkeit, alle Dezimalzahlen zu entfernen ? Ich dachte etwas über eine "für" Aussage, aber ich weiß nicht wirklich, wie man sie benutzt.

Aktuelle Code:

public class Factoring { 

public static void main(String[] args) { 
    double input; 
    double factor = 1; 
    double factorNum; 

    System.out.println("This application calculates every factor of a given number!" 
      + "\nPlease enter a number: "); 
    input = TextIO.getlnDouble(); 

    System.out.println("Original Number: " + input); 

    while (input >= factor){ 
     factorNum = input/factor; 

     System.out.print("\n" + input + " factored by " + factor + " is "); 
     System.out.printf("%.3f", factorNum); 
     factor++; 
    } 
} 

} 

Antwort

6

Verwendung ein int anstelle von double. Wenn Sie double oder float verwenden, erhalten Sie die Dezimalstellen.

Also Ihr dies:

double input; 
    double factor = 1; 
    double factorNum; 

Sollte sein:

int input; 
    int factor = 1; 
    int factorNum; 

SSCCE

public class Factoring { 
    public static void main(String[] args) { 
     int number = 15; 
     int factorNumber = 1; 

     while(factorNumber <= number){ 
      if(number % factorNumber == 0){ 
       System.out.println(factorNumber + " is a factor of " + number); 
      } 
      factorNumber ++; 
     } 
    } 
} 

Ergebnis:

1 is a factor of 15 
3 is a factor of 15 
5 is a factor of 15 
15 is a factor of 15 

Erklärung

Betrachten Sie die Nummer 15 von 2 so wie Sie es in Mathe Klasse geteilt wird.

15 = 2 * 7,5 + 0. Ihr Quotient ist: 7,5
In Programmierung 7.5 und 7 sind unterschiedlich. Eine ist eine Fließkommazahl Nummer und die andere ist eine ganze Zahl oder ganze Zahl wie wir sie nennen.

Zum Speichern von Gleitkommazahlen, float oder Doppel Datentypen verwendet werden. Sie behalten die Zahlen nach den Dezimalstellen bei.
int und lang auf der anderen Seite sind für ganze Zahlen und daher halten sie nicht die Zahlen nach den Dezimalstellen. Sie runden sie nicht ab; Sie schneiden es ab.

Versuchen Sie folgendes:

double withDecimals = 7.5d; 
int withoutDecimals = 7.5d; 

und ausdrucken.
Den Unterschied sehen?

+0

Kann diese Implementierung modifiziert, um die ungeraden Zahlen nicht gespeichert werden überprüfen, ob die 'number' selbst ist? Ebenso nicht, um die geraden Zahlen zu prüfen, wenn die Zahl ungerade ist. Dies würde sicherstellen, dass die "Anzahl/4" -Werte höchstens geprüft werden. –

0

Wenn die Eingabezahl% durch den Faktor nicht gleich Null ist, entfernen Sie sie aus der Liste der Faktoren. Ich nehme hier an, dass Sie über die Antworten wie "1.5" sprechen, die technisch keine Faktoren der Eingangsnummer sind.

0

Verwendung int und prüfen Sie den Rest mit%

int factor = 6; 
int input = 1; 

    while(input <= factor) { 

     if(f % i == 0){ 

      System.out.println(i + " is a factor"); 

     } 

    i++; 

    } 
0

eher verwenden Sie doppelt für Ihre Zahl ist es besser, integer..integer zu ändern für einzelne Zahl ist und doppelt so hoch ist für Dezimalzahl ..

int input; 
    int factor = 1; 
    int factorNum; 

und Wechsel von

System.out.printf("%.3f", factorNum); 

zu

System.out.printf("%.0f", factorNum); 
0

ich die Faktoren in Arraylist

  int s = /* Your number or get from user */; 
    ArrayList<Integer>integers = new ArrayList<>(); 
    for (int i = 1 ; i <= s ; i++){ 
     if(s%i == 0){ 
     integers.add(i); 
      /* just for printing the factors */ System.out.println(i); 
     } 
    }