# Primfaktorzerlegung



## Jats (10. Jan 2011)

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


```
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


----------



## Michael... (10. Jan 2011)

Wozu der Code in Zeile 21?


Jats hat gesagt.:


> [JAVA=21]        if (i >= zuTeilen) System.out.print(i+ " "); [/code]


----------



## Jats (10. Jan 2011)

Michael... hat gesagt.:


> Wozu der Code in Zeile 21?



Hmm .. eigentlich wollte ich nur das Malzeichen am Ende weghaben ^^
Die Ausgabe wird sowieso noch in ein Textfeld umgebaut, aber danke .
Nur wie bekomme ich das Teil jetzt weg ?


----------



## Michael... (10. Jan 2011)

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 (10. Jan 2011)

Okay, ich habe das ganze jetzt wie folgt gemacht:


```
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 (11. Jan 2011)

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


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


----------

