# verschachtelte for-Schleife



## Bine1990 (18. Mai 2012)

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 

Danke schonmal, LG Bine


----------



## VfL_Freak (18. Mai 2012)

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


----------



## SlaterB (18. Mai 2012)

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?


----------



## Bine1990 (18. Mai 2012)

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 (18. Mai 2012)

Bitte den roten Hinweis beachten :

*Java™ Quelltext ist bitte in 
	
	
	
	






		Java:In die Zwischenablage kopieren


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

*


----------



## SlaterB (18. Mai 2012)

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


----------



## Firephoenix (18. Mai 2012)

Mal ein paar Schnipsel zum Nachdenken:

10 Zeilen ausgeben mit der Zeilennummer:

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

```
String zeile = "";
        
//für jedes zeichen in der zeile:
//wenn zeichen <= zeilennummer
zeile += aktuellesZeichen;
//sonst
zeile += ".";
System.out.println(zeile);
```

oder alternativ so:

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


----------



## Bine1990 (18. Mai 2012)

Ops sorry temp soll x2 sein.

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

Sorry bin Neuling


----------



## SlaterB (18. Mai 2012)

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


----------



## Bine1990 (18. Mai 2012)

```
{	
	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 
Bin ich denn bisher auf dem richtigen Weg?


----------



## SlaterB (18. Mai 2012)

> 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


----------



## Bine1990 (18. Mai 2012)

Meinst du es so?


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


		
		System.out.println();
	   
	    
	}
```


----------



## ARadauer (18. Mai 2012)

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


----------



## SlaterB (18. Mai 2012)

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


----------



## Bine1990 (18. Mai 2012)

Tur mir Leid, verstehe ich nicht


----------



## SlaterB (18. Mai 2012)

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

```
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 (18. Mai 2012)

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


```
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();
}
```


----------

