Zeichenausgabe

Neue Frage »

Auf diesen Beitrag antworten »
123michi19 Zeichenausgabe

Meine Frage:
Hi Leute :-)

Wie schaffe ich es in Java denn, dass ich in der ersten Zeile ein beliebiges Zeichen ausgegeben bekomme, in der zweiten Zeile dann zwei, in der dritten drei, usw.

Probiert habe ich es natürlich selber schon einmal:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
/*Test*/
public class Test
{
	public static void main (String[]args)
	{
		int a = 10;
		char zeichen = 'b';
		
		
		for (int i=0; i<a; i++)
			{
			System.out.println (zeichen);
			}
		
		
	}
}



Allerdings gibt mir mein Code ja (auch verständlicherweise) 9x untereinander das Zeichen aus.

Könnt ihr mir bitte weiterhelfen?

Vielen Dank :-)

Meine Ideen:
:-)
 
Auf diesen Beitrag antworten »
eulerscheZahl

Du brauchst 2 verschachtelte Schleifen.
In der inneren gibst du das Zeichen aus (mit print), in der äußeren einen Zeilenumbruch (System.out.println()).
Bei der inneren Schleife musst du dann überlegen, wie oft du sie ausführen willst, hängt vom Zähler der äußeren Schleife ab.
Auf diesen Beitrag antworten »
123michi19

Vielen Dank für die Antwort.

Ich merke gerade, dass ich erstmal grundlegend rauskriegen muss, wie verschachtelte Schleifen funktionieren.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
/*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");
					}
			}
	}
}



Sehe ich es bei diesem Programm richtig, dass zuerst in der äußeren Schleife geprüft wird, ob i<5 ist. Da i als 0 deklariert wurde, ist die Aussage richtig. Dann geht er in die innere Schleife, setzt für j = 0 und i auch gleich 0. Da dies eine falsche Aussage ist, bricht er die innere Schleife ab und geht wieder in die äußere Schleife. Dann wird i um eins erhöht. 1 ist kleiner als 5, somit geht er in die innere Schleife, setzt für j = 1 und für i = 1. Die Aussage ist wiederum falsch, da ich j kleiner i als Voraussetzung habe.

Natürlich merke ich jetzt, dass meine Logik nicht stimmen kann, da als Ausgabe 10x das Wort Mike rauskommt.

Könntest du mir bitte kurz erklären, wie solche verschachtelten Schleifen abgearbeitet werden?

Vielen Dank
Auf diesen Beitrag antworten »
eulerscheZahl

Sieht doch gar nicht so schlecht aus.
Mach aus dem println ein print und dann füge in der äußeren Schleife noch einen Zeilenumbruch hinzu, dann passt die Sache.

Zur Ablaufreihenfolge: lasse dir einfach die Werte für i und j ausgeben:
code:
1:
2:
3:
4:
5:
6:
7:
8:
for (int i=0; i<5; i++)
{
	System.out.println ("i = " + i);
	for (int j=0; j<i; j++)
	{
		System.out.println ("   j = " + j);
	}
}

gibt folgendes aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
i = 0
i = 1
   j = 0
i = 2
   j = 0
   j = 1
i = 3
   j = 0
   j = 1
   j = 2
i = 4
   j = 0
   j = 1
   j = 2
   j = 3


wenn du dir eine Entwicklungsumgebung (z.B. eclipse oder NetBeans) holst, kannst du dort debuggen. Das heißt, du kannst das Programm zeilenweise durchlaufen, Variablenwerte ansehen und sogar ändern. Bei komplizierterem Code sehr hilfreich zur Fehlersuche, für dich auch, um Dinge wie die Ablaufreihenfolge einfach auszuprobieren.
 
Auf diesen Beitrag antworten »
123michi19

Ich würde so gerne mit Eclipse arbeiten (es empfiehlt wirklich jeder), aber die Hochschule gibt im ersten Semester nur Hilfestellung für Proton. Ab dem zweiten Semester darf dann endlich mit Eclipse gearbeitet, oder besser gesagt, der Code geschrieben werden.

Ich hätte noch ein paar weitere, zum Thema gehörende Frage:


1. Warum bleibt das j in der zweiten verschachtelten Schleife eigentlich immer 0. Ich habe doch mit j++ den Befehl zur Erhöhung um 1 gegeben?

2. Der Grund für die Buchstabenausgabe untereinander war der, dass ich einen Weihnachtsbaum aus X-en ausgeben muss.

Ich habe den Code jetzt geschrieben, bekomme aber leider nur immer einen halben böse böse Weihnachtsbaum heraus. Entweder habe ich irgendwo einen kleinen Denkfehler oder eine falsche Klammersetzung Zunge raus

Wäre super, wenn du einen Blick auf den Code werfen könntest:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
public class Schleife
{
	public static void main (String[]args)
		{
			
			int weihnachtsbaumhoehe = 10;
			char zeichen = 'X';
				for (int hoehe = 0; hoehe<=weihnachtsbaumhoehe; hoehe++) //Weihnachtsbaumhöhe = 10; 
					{
						System.out.println (" ");
							{	
								for (int k=weihnachtsbaumhoehe; k>=0; k--)
										System.out.print (" ");
											for (int j=0; j<hoehe; j++)
												{
													System.out.print (zeichen);
												}
													
										
							}
					}
					System.out.println (" ");
					System.out.println (" ");
		}
}



Tausend Dank für deine Hilfe :-)
Auf diesen Beitrag antworten »
eulerscheZahl

Dann empfehle ich NetBeans statt eclipse, gefällt mir persönlich besser smile

Bei jedem Schleifendurchlauf von i wird der Code in der Schleife neu ausgeführt, also auch int j=0

Für die linke Hälfte des Baums brauchst du eine Schleife, bei der je nach Zählerstand entweder ein X oder ein Leerzeichen ausgegeben wird. Musst du bei Zeile 10 mit reinbringen.

Das Aufteilen eines Problems in mehere kleine macht die Lösung einfacher: wie gibt man eine Zeile aus, wenn der Baum eine Gesamtbreite von 7 hat, aber in der Zeile nur 3 Felder ausgefüllt sein sollen? Wie sieht es bei Breite b und n ausgefüllten Feldern aus? Kann man das in eine Funktion schieben?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
public class Main {
	private static void printLine(int width, int filled) {
		for(int i = 0; i < width; i++) {
			if (i < width - filled) {
				System.out.print(" ");
			}
			else {
				System.out.print("*");
			}
		}
		for(int i = 0; i <= filled; i++) {
			System.out.print("*");
		}
		System.out.println();
	}
	
	private static void printTriangle(int width, int lines) {
		for(int i = 0; i < lines; i++) {
			printLine(width, i);
		}
	}
	
	private static void printTree(int height) {
		for(int i = 1; i <= height; i++) {
			printTriangle(height, i + 1);
		}
	}
	
	public static void main (String [] args) {
		printTree(4);
	}	
} 


Und irgendwas machst du falsch beim Einrücken. Aber mach nur so weiter, mein Monitor ist groß genug Forum Kloppe
Auf diesen Beitrag antworten »
123michi19

Vielen Dank für deine Antwort und sorry für das viele Einrücken. Ich habe es mir mittlerweile abgewöhnt :-)
 
Neue Frage »
Antworten »


Verwandte Themen