for - Schleife

123michi19

Lt. Junior Grade
Registriert
Okt. 2014
Beiträge
294
Hi Leute,

ich bin's wieder einmal mit einem Problem bei der for - Schleife.

Ausgeben möchte ich, dass der Buchstabe "b" 5 mal untereinander ausgegeben werden soll:

So soll es aussehen:

b
bb
bbb
bbbb
bbbbb

Jetzt habe ich mein Programm mit verschachtelten for-Schleifen geschrieben, bekomme aber anstatt meiner gewünschten Ausgabe immer b,c,d,e,f,.....

Hier einmal mein Programm:

Code:
/*Schleife.java*/
public class Schleife
{
	public static void main (String[]args)
	{
		char zeichen = 'b';
		for (int i=0; i<5;i++)
			{
				for (int j=0;j<=1;j++)
					{
						System.out.println (zeichen);
						zeichen++;
					}
			}	
	
	}
}



Könnt ihr mir bitte sagen, wo mein Denkfehler liegt? Vielen Dank
 
Hi,

Was soll das "zeichen++;"? "zeichen" ist doch deine Ausgabe "b", wieso zählst du die hoch? Und wieso zwei Schleifen?

VG,
Mad
 
zeichen ist ein Char
Mit zeichen++ erhöhst du den ASCII-Wert dahinter. So wird dann aus b => c
 
Entweder ein char* machen, oder _nicht_ println benutzen. Soweit ich mich erinnern kann kommt immer ein \n am Ende bei Println
Was du mit zeichen++ machst, haben die anderen ja schon erklärt...

Hoffe das reicht als Denkanstoß :>
 
statt j<=1 sollte da wohl j<=i stehen, oder? um mal deiner version zu bleiben. sonst wird die innenre schleife ja immer nur einmal genommen und ist damit sinnlos
das mit zeichen++ wurde ja erklärt
 
Code:
public class Schleife {
	public static void main(String[] args) {
		char zeichen = 'b';
		for (int zeile = 1; zeile <= 5; zeile++) {
			for (int anzahlZeichen = 1; anzahlZeichen <= zeile; anzahlZeichen++) {
				System.out.print(zeichen);
			}
			System.out.println();
		}
	}
}
 
1. Erstmal vielen Dank für die Hilfe von Euch. Ich bin echt froh, dass es solche Leute wie Euch gibt ;-)
2. Ich verstehe die Welt nicht mehr. Bevor ich mit zeichen++ experimentiert habe, stand bei mir die gleiche Lösung wie von NiNock angegeben, nur dass ich die Ausgabe nicht bekommen habe :-)
Ergänzung ()

Ich hätte noch eine, zum Thema gehörende, Frage, da ich bei for-Schleifen irgendeinen Denkfehler habe :-)

Wenn ich jetzt den folgenden Code habe:

Code:
/*Test.java*/
public class Test
{
	public static void main (String[]args)
	{	
		for (int i=0; i<5;i++)
			{
				for (int j=0; j<i;j++)
					{
					System.out.println ("Mike");
					}
			}
	}
}

Hier gehe ich davon aus, dass er in die zweite Schleife geht, 5x Mike ausgibt, dann das i in der ersten Schleife um 1 erhöht, wieder in die zweite Schleife geht und wieder 5x Mike ausgibt.

Warum kommen am Ende bei mir immer 10 Mike's heraus :-)


Besten Dank ;-)
 
Da steht 10x Mike, weil 1 + 2 + 3 + 4 = 10 ist.
Für i=0 und i=1 wird nichts ausgegeben, da die innere Schleife immer sofort abbricht.
Bei i=2 wird genau 1x Mike erzeugt, da du j<i als Bedingung hast.
Bei i=3 sind es 2x Mike, bei i=4 entsprechend 3x Mike und letztendlich erzeugt i=5 noch 4x Mike.
 
Ah, ok, jetzt wird es schon logischer. Allerdings, wenn i=1 ist und bei mir die innere Schleife j=0 und j<1, dann müsste doch eine Ausgabe erfolgen?
Ergänzung ()

Und wird j nicht auch erhöht, sodass immer nur 1x Mike addiert wird?
 
Oh ... da bin ich etwas mit den Zahlen verrutscht.
Das mit 1 + 2 + 3 + 4 = 10 passt schon, aber du musst alle i's in meinem letzten Beitrag jeweils um 1 verringern. Bei 0 wird die innere Schleife nicht durchlaufen, bei 1 passiert es nur einmal ... und i=5 wird gar nicht erreicht (wegen i<5).
 
Okey, dann habe ich nur noch eine Frage :-)

Es müsste doch in der inneren Schleife das j auch erhöht werden? Dann kommt aber am Ende wieder nicht die 10-malige Ausgabe heraus?
 
Versteh deine letzte Frage nicht ganz :) Das j wird immer nach einem Schleifendurchlauf erhöht, und wenn j dann nicht mehr kleiner als i ist, bricht die innere Schleife eben ab. Warum sollte da keine 10-malige Ausgabe herauskommen?
 
So wie ich bei der Aufgabe eben gezählt habe, ging es ja folgendermaßen:

Code:
/*Test.java*/
public class Test
{
	public static void main (String[]args)
	{	
		for (int i=0; i<5;i++)
			{
				for (int j=0; j<i;j++)
					{
					System.out.println ("Mike");
					}
			}
	}
}

Der 1. Durchgang gibt ja noch garnichts aus, da i nicht kleiner j, sondern gleich j ist. Der zweite Durchgang ist dann j=0 und i=1, also wird Mike einmal ausgegeben. Beim dritten Durchgang ist i = 2 und j immer noch 0 (da Mike jetzt zweimal ausgegeben wird?) Eigentlich müsste j dann 1 sein, allerdings gäbe es dann Mike nur ein Mal, anstatt zweimal aus?

Das meine ich mit j=0. Ich hoffe, du kannst meiner Logik folgen :-)
 
Die ersten beiden Durchläufe stellst du dir richtig vor, nur bei dem dritten ist ein Fehler drin:
Stell dir mal den dritten Durchlauf so vor:
i=2, j=0
Ist j kleiner als i? Ja, also:
Mike
j wird um eins erhöht nach dem ersten Durchlauf:
i=2, j=1
Ist j kleiner als i? Ja, also:
Mike
j wird um eins erhöht:
i=2, j=2
Ist j kleiner als i? Nein, also wird die innere Schleife nicht nocheinmal ausgeführt.
Mike wird also bei dem dritten Durchgang zweimal ausgegeben.
 
Zuletzt bearbeitet:
Da ist der entscheidende Punkt --> ich habe falsch gedacht :-)

Vielen Dank für deine Hilfe :-)
 
Du hast noch ein kleines Verständnisproblem mit der Gültigkeit der Variablen: j wird in der inneren Schleife deklariert. Wird diese verlassen ist j "weg". Läuft die äußere Schleife weiter wird j wieder deklariert und mit 0 initialisiert. Damit j wie i hochgezählt werden würde, müsstest du j außerhalb der äußeren Schleife deklarieren und in der inneren Schleife int j = 0 weglassen.
 

Ähnliche Themen

Antworten
10
Aufrufe
761
W
  • Gesperrt
  • Frage
2 3
Antworten
45
Aufrufe
2.661
Zurück
Oben