Primfaktorzerlegung

Jats

Aktives Mitglied
Hey, ich habe ein Programm geschrieben, das eine Zahl in seine Primfaktoren zerlegen soll.
Mein Code sieht wie folgt aus:

Java:
    public void actionPerformed(ActionEvent e) {
        
        int zuTeilen = new Integer(tEingabe.getText()).intValue();        
        int i;

        System.out.print(zuTeilen + " = ");

        for (i=2; i <= zuTeilen;) {

            if (zuTeilen%i == 0) {
                System.out.print(i+" * ");
                zuTeilen = zuTeilen/i;

            }

            if (zuTeilen%i != 0)
                i++;

        }// for

        if (i >= zuTeilen) System.out.print(i+ " "); 

    }

Das einzig blöde ist nur, dass das Ergebnis dann immer doppelt so groß ist, wie die eingegebene Zahl.
Was passiert hier ?
Ich gehe davon aus, dass die Schleife einmal zu oft durchläuft.
Aber warum ?

Kann mir jemand helfen ?
Danke schomal :)
 
Zuletzt bearbeitet von einem Moderator:

Michael...

Top Contributor
Wenn man es so wie im Bsp. direkt auf die Konsole ausgibt, könnte man sich merken, ob bereits ein Faktor gefunden wurde. Falls nein gibt man nur den Faktor aus, falls ja gibt man " * " + Faktor aus.

Man könnte aber auch die jetzigen Ausgaben in einem String, StringBuffer... sammeln und am Ende die letzten zwei/drei Zeichen abschneiden.
 

Jats

Aktives Mitglied
Okay, ich habe das ganze jetzt wie folgt gemacht:

Java:
    public void actionPerformed(ActionEvent e) {
        
        int zuTeilen = new Integer(tEingabe.getText()).intValue();        
        int i;

        tAusgabe.setText(zuTeilen+" = ");

        for (i=2; i <= zuTeilen;) {

            if (zuTeilen%i == 0) {
                tAusgabe.setText(tAusgabe.getText()+"*"+i);
                zuTeilen = zuTeilen/i;

            }

            if (zuTeilen%i != 0)
                i++;

        }// for

    }
 

Andi_CH

Top Contributor
unschön ist höchstens noch das führende *

Java:
public class Zerlegung {

	private static Ausgabe tAusgabe;
	private static Eingabe tEingabe;

	public static void main(String[] args) {
		tAusgabe = new Ausgabe();
		tEingabe = new Eingabe();
		int zuTeilen = new Integer(tEingabe.getText()).intValue();        
		int i;
		boolean firstTime = true;

		tAusgabe.setText(zuTeilen + " = ");

		for (i=2; i <= zuTeilen;) {
			if (zuTeilen%i == 0) {
				if (!firstTime) {
					tAusgabe.setText(tAusgabe.getText() + " * ");
				} else {
					firstTime = false;
				}
				tAusgabe.setText(tAusgabe.getText() + i);
				zuTeilen = zuTeilen/i;
			}
			if (zuTeilen%i != 0)
				i++;
		}// for
	}
}
 

Ähnliche Java Themen

Neue Themen


Oben