# raute ausgabe



## java__neuling (3. Nov 2010)

hallo,

könnt ihr mir eventuell helfen.
ich verstehe die logik das folgenden quellcodecs nicht.
genauer gesagt die logik die sich hinter der if-bedingung verbirgt.

kann mir jemand auf die sprügen helfen?
programm läuft zwar aber ich will auch wissen warum ;-)


```
public class rautetest {

  public static void main(String[] args)
  {



int hoehe = 8;
int grenze = hoehe /2; //4
int laenge = hoehe * 2; //16

for (int i = 0; i < grenze; i++) {


	for (int j = 0 ; j < laenge; j++) {

		if ( (j > (laenge/2) - i) && (j < (laenge/2) + i) )
		{
			System.out.print("+");
		}
		else
		{
			System.out.print(" ");
		}
									   }
		System.out.println();


System.out.println();

}



 }

}
```

vielen dank!


----------



## XHelp (3. Nov 2010)

Bevor die ganze Hilfe losgeht, lohnt es sich für den Java-Code die Java-Tags zu verwenden


----------



## java__neuling (3. Nov 2010)

sorry......


```
public class rautetest {

  public static void main(String[] args)
  {



int hoehe = 8;
int grenze = hoehe /2; //4
int laenge = hoehe * 2; //16

for (int i = 0; i < grenze; i++) {


	for (int j = 0 ; j < laenge; j++) {

		if ( (j > (laenge/2) - i) && (j < (laenge/2) + i) )
		{
			System.out.print("+");
		}
		else
		{
			System.out.print(" ");
		}


									   }
		System.out.println();

System.out.println();

}

    }
}
```


----------



## XHelp (3. Nov 2010)

Wo genau sind deine Verständnisprobleme?
Du kannst ja das Programm auf dem Zettel durchspielen, dann wird es vllt verständlicher.
Generell kannst du mit der if entscheiden, ob die Stelle, wo gleich ein Zeichen gedruckt wird sich in der Mitte der Zeile +-i befindet befindet.


----------



## java__neuling (3. Nov 2010)

XHelp hat gesagt.:


> wird sich in der Mitte der Zeile +-i befindet befindet.



das verstehe ich nicht. hört sich jetzt zwar komisch an aber ich habe bereits knapp eine stunde investiert und auch mal mit stift und blatt papier versucht aber irgendwie raff ich es nicht......


----------



## bandy (3. Nov 2010)

java__neuling hat gesagt.:


> das verstehe ich nicht. hört sich jetzt zwar komisch an aber ich habe bereits knapp eine stunde investiert und auch mal mit stift und blatt papier versucht aber irgendwie raff ich es nicht......





```
public class rautetest {
 
  public static void main(String[] args)
  {
 
for (int i = 0; i < 4; i++) {
 
 
    for (int j = 0 ; j < 16; j++) {
 
        if ( (j > (16/2) - i) && (j < (16/2) + i) )
        {
            System.out.print("+");
        }
        else
        {
            System.out.print(" ");
        }
 
 
                                       }
        System.out.println();
 
System.out.println();
 
}
 
    }
}
```


Ist es so einfacher?

Ich denke bevor man das verstehen will, soll man sich erst fragen was der Sinn des Programms ist, oder? Was willst du mit dem Programm erreichen?

1.Du hast zwei Schleifen, die erste macht 4 Durchlaeufe, die zweite Schleife macht 16 Durchlaeufe zu jeden Durchlauf der ersten Schleife.
2.Die zweite Schleife uberprueft bei jedem Durchlauf, ob (j > (16/2) - i) && (j < (16/2) + i)
d.h. ob j groesser 8 minus i ist und ob j kleiner 8 plus i ist, wenn das der Fall ist wir mit  System.out.print("+"); ein Plus ausgedruckt, wenn nicht geht es in else-Zweig weiter und es wird das hier  System.out.print(" ");, eine leere Zeichenkette ausgedruckt, das war es


----------



## java__neuling (3. Nov 2010)

bandy hat gesagt.:


> 1.Du hast zwei Schleifen, die erste macht 4 Durchlaeufe, die zweite Schleife macht 16 Durchlaeufe zu jeden Durchlauf der ersten Schleife.
> 2.Die zweite Schleife uberprueft bei jedem Durchlauf, ob (j > (16/2) - i) && (j < (16/2) + i)
> d.h. ob j groesser 8 minus i ist und ob j kleiner 8 plus i ist, wenn das der Fall ist wir mit  System.out.print("+"); ein Plus ausgedruckt, wenn nicht geht es in else-Zweig weiter und es wird das hier  System.out.print(" ");, eine leere Zeichenkette ausgedruckt, das war es



ja, was das programm letzentlich macht sehe ich ja.
aber was ich eben nicht so richtig verstehe ich wie eine raute entsteht d.h. warum durch diese merkwürdige if bedinung in der ersten zeile ein zeichen steht und in der zweiten zeile 2, in der dritten 3 unsw....wundert mich irgendwie. 
ist diese if anweisung für euch total verständlich?
was das programm letzentlich macht weiß ich aber warum dann gerade eine raute entseht verstehe ich nicht!........

kann mir jemand das noch einmal von der logik her erklären?


----------



## SlaterB (3. Nov 2010)

das Programm soll genau das machen, was du willst,
es soll eine Zeile mit 1 + machen, dann eine Zeile mit 2 +, dann mit 3, 4, 5 usw.
man kann nun jede Zeile einzeln schreiben oder die Struktur erkennen und eine Schleife schreiben

> zeile mit 1;
> zeile mit 2;
> zeile mit 3;
> zeile mit 4;
> zeile mit 5;

ist dasselbe wie

> schleife für i von 1 bis 5: zeile mit i

einfach oder?
das ist das ganze Grundkonzept, alle komplizieren ifs oder ineinander verschachtelte Schleifen sorgen nur für Spezialisierungen davon

ist doch klar dass bei
> schleife für i von 1 bis 5: zeile mit 5-i
was anderes rauskommt als bei
> schleife für i von 1 bis 5: zeile mit i
oder auch
> schleife für i von 1 bis 5: zeile mit i dann i/2 Leerzeichen, dann 2x i


man muss nur die Bedingung genau genug formulieren, dann ist fast alles möglich,
welches if nun genau für eine Raute zuständig ist oder andere Muster brauch man nicht wissen, 
da gibts auch keine vordefinierte Logik, ausprobieren bzw. Kopf einschalten,
mehr kann man da nicht machen, ohne gewisse Form von Kreativität nicht zu lösen


----------



## bandy (3. Nov 2010)

java__neuling hat gesagt.:


> ja, was das programm letzentlich macht sehe ich ja.
> aber was ich eben nicht so richtig verstehe ich wie eine raute entsteht d.h. warum durch diese merkwürdige if bedinung in der ersten zeile ein zeichen steht und in der zweiten zeile 2, in der dritten 3 unsw....wundert mich irgendwie.
> ist diese if anweisung für euch total verständlich?
> was das programm letzentlich macht weiß ich aber warum dann gerade eine raute entseht verstehe ich nicht!........
> ...



Ich habe das Programm nicht ausprobiert, aber ich denke es ist nicht erforderlich, es ist einfach....


Nun zur Logik. Sehe dir das hier noch einmal an "((j > (16/2) - i) && (j < (16/2) + i))":rtfm:

Beim ersten Durchlauf haben j und i den Wert 0

D.h. du hast so etwas if((0 > (8) - 0) && (0 < (8) + 0)) man kann dies auch noch so ausschreiben 
if((0 > 8) && (0 < 8)) ==> Ergebnis ist false "+" wird nicht gedruckt

Dann beim zweiten Durchlauf aendert sich der Wert von j
D.h. du hast so etwas if((1 > (8) - 0) && (1 < (8) + 0)) man kann dies auch noch so ausschreiben 
if((1 > 8) && (1 < 8)) ==> Ergebnis ist false "+" wird nicht gedruckt

Dann beim dritten Durchlauf aendert sich der Wert von j
D.h. du hast so etwas if((2 > (8) - 0) && (2 < (8) + 0)) man kann dies auch noch so ausschreiben 
if((2 > 8) && (2 < 8)) ==> Ergebnis ist false "+" wird nicht gedruckt  Warum nicht????
Weil (2>8) ist false und (2<8) ist true, muessen aber beide true sein und dann wird plus gedruckt!
So geht es bis j den Wert 15 erreicht hat, dann endet die Schleife und es geht mit der ersten Schleife weiter, i bekommt den Wert 1 und die zweite Schleife beginnt von vorne, allerdings mit anderen Werten.

Nun sieht es so aus:


D.h. du hast so etwas if((0 > (8) - 1) && (0 < (8) + 1)) man kann dies auch noch so ausschreiben 
if((1 > 7) && (1 < 9)) ==> Ergebnis ist false "+" wird nicht gedruckt
So geht es wieder weiter bis j den Wert 15 hat und geht es wieder zur ersten Schleife, diese aendert den Wert auf 2 und endet dan wenn es den Wert 3 hat und zweite Schleife mit neuen Werten bei 15 Durchlauf endet.


----------



## java__neuling (4. Nov 2010)

okay, super vielen dank!

habt ihr sehr frein gemacht!!! ;-)

eine ganz andere frage habe ich aber noch, will nicht dafür exra ein neues topic aufmachen.

will gerade mittels javadoc die api erzeugen.
meine javadateien bestehen aber aus unterschiedlichen klasse die ugelich noch in unterschiedlichen verzeichnissen liegen.

wenn ich jetzt die javadoc erzeuge fehlen mir die ganzen restlichen ganzen klassen.
i der html datei werden auf der rechten seite nur die klasse aus den einen verzeichnis angeziegt


normalweise erstelle ich die javadoch immer so

javadoc *.java

leider nutze liegen diesmal aber nicht alle dateien in einen verzeichnis

könnt ihr noch einmal helfen?!


----------



## java__neuling (5. Nov 2010)

will nicht spamen aber niemand der helfen kann?!


----------



## SlaterB (5. Nov 2010)

in so ein altes Thema schaut kaum noch jemand neu rein und ganz unwahrscheinlich dann jemand mit javadoc-Kenntnissen,
vielleicht doch ein neues Thema, oder einfach vorher die Bedienunganleitung von javadoc lesen

edit:
Google
->
compile javadocs from multiple folders - Dev Shed


----------



## marv (29. Nov 2011)

Hallo zusammen,

ich habe noch eine Frage zu der Raute, ich muss die gleiche Aufgabe lösen und es ist natürlich jetzt einfach, wenn ich den Quellcode hier rauskopiere compiliere und dann ausführe.

Ich möchte aber verstehen, wie ich an eine solche Aufgabe herangehe?

Kann mir diesbezüglich jemand auf die Sprünge helfen und mir sagen ich ich aus der Aufgaben stellung "Raute auf Konsole ausgeben, die oben genannte Schleife "erarbeite"? Wie gehe ich an die Aufgabe ran?

Würde ich echt freuen wenn mir jemand helfen kann.

Vielen Dank und viele Grüße

Marv


----------



## SlaterB (29. Nov 2011)

eine Schleife ist etwas was wiederholt wird mit ansteigender Variable, ob 0, 1, 2, 3 oder 0, 2, 4, 6 oder was immer man sonst braucht,
von da ist der Weg zu einem Programm, welches 0, 1, 2, 3 Sterne ausgibt, so kurz dass es grundsätzlich nichts 'heranzugehen' gibt,

man muss nur eine Schleife oder mehrere setzen und notfalls anpassen bis es läuft,
Variationen wie Anstieg und dann Abstieg kann man mit mehreren Schleifen oder if/ else, + und - Rechnung bestens hinbekommen,
da ist nichts dabei

ausprobieren ist vielleicht noch ein Stichwort, sowas muss man nicht vorher halbwegs fertig im Kopf haben wie etwa komplexe Suchalgorithem, 
einfach überall mal ein Minus oder *3 dazubasten und schauen was sich verändert


----------

