Letztes Komma in der while-Schleife wegbekommen?

4 Antworten

Von Experte PWolff bestätigt

Ein typisches Problem ja.

In deinem aktuellen Code gehst du halt davon aus, dass immer etwas folgt. Du setzt das Komma obwohl du das ja nicht weißt. Damit hast du immer ein Komma zuviel.

Entweder du bastelt den Code so um, dass das Komma immer vor der ausgegebenen Zahl platziert wird (und dann musst du ne Ausnahme einprogrammieren für die allererste Ausgabe, da darf dann kein Komma ausgegeben werden), oder du sammelst die Ausgabe in einen String, und schneidest dann vor der Ausgabe das letzte Zeichen weg (was dann das Komma wäre).

Beide Varianten sind probate Wege das Ziel zu ereichen.


sizenelan 
Fragesteller
 25.05.2022, 09:52

Daran hab ich auch gedacht, nur fällt mir keine sinnvolle if-Abfrage vor der Schleife ein. Denn i in der Schleife ist maßgebend für die richtige Ausgabe. Könntest du mir vielleicht einen Tipp in die richtige Richtung geben?

1
Kelrycorfg  25.05.2022, 10:41
@sizenelan

Nutze einen "Marker". Eine Variable, die dir sagt, ob du im Programm ganz am Anfang bist oder mittendrin. Das macht es leichter. Idealerweise ein Boolean Wert.

bool first = true;

Und dann ersetzt du deine Ausgabe durch diese IF-Anweisung. Das sollte reitheoretisch klappen, wenn ich jetzt keine Tippfehler drin hab :)

if (first == true) { system.out.print(i); first = false; } else { system.out.print(","+i); }

1
PWolff  25.05.2022, 11:01
@Kelrycorfg

In ungefähr dieser Art implementiere auch ich so etwas.

Wobei

booleanVariable == true

für mich ein Aua-Aua ist.

1
Kelrycorfg  25.05.2022, 11:27
@PWolff

Ja, nicht unbedingt die eleganteste Lösung, aber sie sollte ihren Zweck erfüllen. Und sizenelan müsste seinen derzeitigen Code kaum verändern.

0
sizenelan 
Fragesteller
 26.05.2022, 02:39
@Kelrycorfg

Hab schon eine Lösung gefunden. Habe einen int x mit 0 initalisiert, eine if-Abfrage mit if x==1 eingebaut und erst unten in der while-schleife int x mit 1 initalisiert. Beim ersten Durchlauf ist also x noch nicht 1, daher kein Komma vor der Zahl :)

1

Ich würde entweder einen String bauen in dem immer Komma und die Zahl steht und den einfach ab dem zweiten Buchstaben ausgeben:

public class Primfaktorzerlegung {
	public static void main(String[] args) {
		
		int zahl = Integer.parseInt(args[0]);
		String ergebnis = "";
		
		for (int i = 2; i < zahl; i++) {
			while(zahl%i == 0) {
				ergebnis += "," + i;
				zahl /= i;
			}
		}
		if (zahl>2) {
			ergebnis += "," + zahl;
		}
		
		System.out.println(ergebnis.substring(1));
	}
}

oder - vielleicht etwas eleganter - alle Zahlen in eine Liste (oder Queue) packen und dann mit String.join jeweils ein Komma dazwischen machen:

public class Primfaktorzerlegung {
	public static void main(String[] args) {
		
		int zahl = Integer.parseInt(args[0]);
		List<Integer> liste = new LinkedList<>();
		
		for (int i = 2; i < zahl; i++) {
			while(zahl%i == 0) {
				liste.add(i);
				zahl /= i;
			}
		}
		if (zahl>2) {
			liste.add(zahl);
		}
		
		System.out.println(liste);
		// oder
		System.out.println(String.join(",", liste.stream().map(i->i.toString()).toList()));
		// oder
		System.out.println(liste.stream().map(i->i.toString()).collect(Collectors.joining(",")));
	}
}
Von Experte ralphdieter bestätigt

(Ich habe keine Java-Erfahrung, deshalb kann es sein, dass ich mich etwas blöd ausdrücke.)

So etwas wie:

String Komma = "";

(also erstmal eine leere Zeichenkette)

und dann die Sequenz

print(Komma + i);
Komma = ",";

ralphdieter  25.05.2022, 10:03

Statt „Komma“ würde ich „Trenner“ sagen.

0

Hey,

im Zweifel kannst du einfach substring nutzen, um das letzte Zeichen abzuschneiden.

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung