verschachtelte for-Schleife

B

Bine1990

Gast
Hallo Zusammen,

ich möchte in Java ein Dreieck in der Console abgebildet bekommen, es sollte folgendermasen aussehen:

1 . . . . . . . . .
1 2 . . . . . . . .
1 2 3 . . . . . . .
1 2 3 4 . . . . . .
1 2 3 4 5 . . . . .
1 2 3 4 5 6 . . . .
1 2 3 4 5 6 7 . . .
1 2 3 4 5 6 7 8 . .
1 2 3 4 5 6 7 8 9 .
1 2 3 4 5 6 7 8 9 0

Die Punkte sollen ebenfalls dargestellt werden.
Ich komm einfach nicht drauf :(

verschachtelte for-schleifen durchnummeriert bekomme ich hin, aber hier blockiert mein Gehirn :p

Danke schonmal, LG Bine :)
 

VfL_Freak

Top Contributor
Moin,

was hast Du denn bislang schon an Code ???:L

Kleiner Tipp:
eine Schleife zu Darstellung der Ziffern 1-0 und die zweite für die richtige Anzahl an Punkten ;)

Gruß
Klaus
 
S

SlaterB

Gast
dass du keinerlei eigenen Code postest/ konkrete Fragen stellst, brockt dir den Hausaufgaben-Bereich ein, verschoben

wieviel du schon hast/ posten kannst, wirst du selber wissen, ansonsten:
1. allgemein: fange mit einem Hello Word-Programm an
2. spezieller: fange mit einer Schleife an, die 10 Zeilen, z.B.
1
2
3
4
5
6
7
8
9
10
ausgibt, schaffbar?
 
B

Bine1990

Gast
Ja das bekomme ich noch hin mit der Schleife:

{ public static void main (String [ ] aufrufparam)
{

for (int a1 = 0; a1 <=10; a1++)

{
System.out.println(a1);
}}


ich tue mich aber schwer mit den Punkten in der verschachtelten.
Habe eine verschachtelte for-Schleife, mit Zahlen:

String x1 = "";
int x2 = 0;

for(int i=1 ;i<=laenge;i++){
for(int j=1;j<=laenge;j++){
x2 = (j+i-1)%10;
x1 += temp;
}
x1 += "\n";
}
return x1;
 

VfL_Freak

Top Contributor
Bitte den roten Hinweis beachten :

Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben[/SIZE][/COLOR][/B]


[code=Java]
String x1 = "";
int x2 = 0;

for( int i=1; i<=laenge; i++ )
{
    for( int j=1; j<=laenge; j++ )
    {
        x2 = (j+i-1)%10;  // warum MODULO ??
        x1 += temp;       // was ist denn 'temp' ??
    }
    x1 += "\n";
}
return x1;
 
Zuletzt bearbeitet:
S

SlaterB

Gast
es gibt Java-Code-Tags wie überall in dicken roten Hinweisen zu lesen..

was soll temp in deinem Code sein? nirgendwo definiert,
x2 ist kompliziert berechet, aber auch eher unnötig

wie würdest du eine einzelne Zeile wie
> 1 2 3 4 5 6 . . . .
ausgeben? also durchaus variabel, nicht fest Zeichen für Zeichen,
durch die äußere Schleife bekommst du die Information 6 (oder 5) als Trenner,
ansonsten hast du freie Bahn innerhalb der Schleife,
du kannst jetzt eine Schleife schreiben die alle Zahlen von 1-6 ausgibt,

ähnlich meinem vorherigen initialen Vorschlag nun eben alles in derselben Zeile
und außerdem nicht fest bis 10, sondern bis zur äußeren Schleifenvariable i,
aber das sind verkraftbare Zusätze wenn man sie einzeln konzentriert bearbeitet
 
F

Firephoenix

Gast
Mal ein paar Schnipsel zum Nachdenken:

10 Zeilen ausgeben mit der Zeilennummer:
Java:
for(int i = 1; i <= 10; i++){
    System.out.println(i);
}

jetzt willst du weiterhin die 10 Zeilen haben, die for-schleife ändert sich also nicht mehr.
Was sich ändert ist, wie du eine Zeile ausgibst (also das System.out.println(i).

Jetzt kann man sich überlegen was man pro Zeile macht:
man gibt 10 Zeichen aus, ist die position des aktuellen zeichens kleiner oder gleich der zeilennummer wird es als zahl ausgegeben, ansonsten als buchstabe.

Du kannst dir jetzt entweder den String für eine Zeile etwa so zusammenbauen (pseudocode):
Java:
String zeile = "";
        
//für jedes zeichen in der zeile:
//wenn zeichen <= zeilennummer
zeile += aktuellesZeichen;
//sonst
zeile += ".";
System.out.println(zeile);

oder alternativ so:
Java:
//zähle hoch bis zu der zeilennummer
//für jeden durchlauf
System.out.print(aktuelleDurchlaufsnummer);
//zähle von der zeilennummer+1 hoch bis 10
//für jeden durchlauf
System.out.print(".");
System.out.println(); //zeilenumbruch

Die aktuelle Zeilennummer innerhalb der for-schleife kriegst du über die variable i.

Gruß
 
B

Bine1990

Gast
Ops sorry temp soll x2 sein.

@ SlaterB: Ja die Schleife 123456 schaff ich, aber die Punkte danach nicht.

Sorry bin Neuling :(
 
S

SlaterB

Gast
123456 ist die erste innere Schleife, gut,
danach noch eine, die zunächst auch 123456 ausgibt,
dann folgen die Modifikationen:
1. es sollte in der zweiten Schleife nur noch 1234 sein, also die Grenze ändern,
nicht i sondern welche andere könnte dort stehen die immer kleiner wird während i größer wird (Denksportaufgabe)?
2. ist trivial: Punkte statt 1234 ausgeben
 
B

Bine1990

Gast
Java:
{	
	for(int i = 1; i <= 10; i++){
		
		for(int j = i; j <= 10; j++)
			
	    System.out.print(j);


		System.out.print(".");
		System.out.println();
	   
	    
	}

habs nun so, es kommt folgendes raus:

12345678910.
2345678910.
345678910.
45678910.
5678910.
678910.
78910.
8910.
910.
10.

jetzt brauche ich noch die restlichen Punkte :D
Bin ich denn bisher auf dem richtigen Weg?
 
S

SlaterB

Gast
123456 ist die erste innere Schleife, gut,
danach noch eine, die zunächst auch 123456 ausgibt,

von der angesprochenden zweiten inneren Schleife ist im Moment nicht viel zu sehen,
daher bist du auf dem von mir vorgeschlagenen Weg offensichtlich nicht
(wobei die erste innere in dem Code auch nicht nur 123456 ist, sondern immer bis 10 geht)

es gibt natürlich auch noch diverse andere Varianten,
z.B. nur eine innere Schleife die über die ganze Breite geht (wie du sie schon hast)
und mit if/else zwischen Zahlen und Punkten unterscheidet
 
B

Bine1990

Gast
Meinst du es so?

Java:
{	
	for(int i = 1; i <= 6; i++){
		
		for(int j = 1; j <= 6; j++)
		
		System.out.print(j);


		
		System.out.println();
	   
	    
	}
 

ARadauer

Top Contributor
spar dier auf keinen fall die { } in deiner ineren vor schleife...
das ist ja grundsätzlich nicht schlecht... ich würd die innere aber auch von 0 weg gehen lassen.
innen dann noch eine if(wenn i >j) dann i ausgeben sonst punkt... sollte klappen...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
warum geht die äußere Schleife nicht mehr bis 10?
diese Grundstruktur, es sind doch 10 Zeilen auszugeben, wollte ich sicher nicht ändern,
in der inneren Schleife 6 als Grenze direkt reinzuschreiben ist auch bestensfalls bös missverstanden,

zurück wieder zu meinem ersten Posting:
nur eine Schleife überhaupt im Programm, welche die Zahlen 1-10 oder 0-9 untereinander ausgibt, dort wird die Schleifenvariable verwendet,
dieses Faktum muss sich durch alles Erweiterungen ziehen, wenn man diese quasi Schleifennummer nicht im inneren berücksichtigt,
kann nichts funktionieren

als ich von 123456 im Inneren sprach fiel dabei auch 'variabel, nicht fest' + 'durch die äußere Schleife bekommst du die Information 6 (oder 5) als Trenner'
es war also
1
12
123
1234
usw. gemeint,

nicht 10x, oder gar nur 6x hintereinander
123456
123456
123456
...
 
S

SlaterB

Gast
dein Programm ist fast fertig bis auf Grenzen (wieder 10 statt 6) und ein eingebautes if, zudem ARadauer sogar schon die Bedingung genannt hat,
wenn du das verfolgen willst, dann versuche dich daran oder lasse zumindest an deinen Postings erkennen, dass du dich darauf beziehst


-----

falls du meinen sonderbaren Weg des Lernens folgen willst,
dann fange wieder mit
Java:
for (int a1 = 0; a1 <=10; a1++) {
   System.out.println(a1);
}
an,
überzeuge dich von den vorhandenen positiven Aspekten dieses Codes
- mehr oder weniger richtige Anzahl von Zeilen (11 statt 10 könnte zuviel sein)
- in jeder Zeile Ausgabe einer wichtigen Zahl, 1, 2, 3, 4,
das ist nützlich wenn man sich die Aufgabe anschaut wo in jeder Zeile was passiert was mit 1 in der ersten Zeile,
2 in der zweiten Zeile, 3 in der dritten Zeile usw. zu tun hat

wenn du davon ausgehst,
dann baue jetzt irgendeine innere Schleife, die was mit dieser Zeilennummer, mit a1 macht,
Details erwähne ich lieber gar nicht weil du sowieso was anderes machst,
fällt dir soweit irgendwas ein, kannst du irgendeine konstruktive Anmerkung außer dem immer fundamentalen Diskussionsende 'ich nix verstehen' machen?
 

Landei

Top Contributor
Man braucht nur eine innere Schleife, aber da muss man nachschauen, ob eine Zahl oder ein Punkt kommen muss:

Java:
for(int zeile = 0; zeile < 10; zeile++) {
    for(int spalte = 1; spalte <= 10; spalte++) {
       System.out.print(spalte <= zeile + 1 ? (spalte % 10) + " " : ". ");
    }
    System.out.println();
}
 

Neue Themen


Oben