# Weihnachtsbaum -.-



## LuckyEric1986 (24. Nov 2009)

Also, ich hab hier folgende AUfgabenstellung...

Schreiben Sie eine Funktion, die eine Zeichenkette beliebiger Länge mit beliebiger Startposition
(beginnend von der aktuellen Cursor-Position) in eine Zeile zeichnet. Auch das verwendete Zeichen
soll frei wählbar sein. Die Funktion hat also die Form:
static void printKette (char zeichen, int start, int laenge)

Der Aufruf

printKette('a', 3, 5);

bewirkt also, dass erst zwei Leerzeichen und dann 5-mal der Buchstabe a geschrieben werden.
Testen Sie Ihre Funktion mit einem einfachen main()-Programm.

[Java]
// Weihnachtsbaum.java

public class Weihnachtsbaum
{
	static void printKette (char zeichen, int start, int laenge)
	{
		printKette('a', 3, 5);
	}

	public static void main (String []args)
	{
		printkette();
	}
}
[/Java]

Funktioniert nich. Fehlermeldung: Method printKette not found in class Weihnachtsbaum.

Ich bin am verzweifeln!


----------



## SlaterB (24. Nov 2009)

[Java]
public class Weihnachtsbaum
{
	static void printKette (char zeichen, int start, int laenge)
	{
		// hier muss noch Code rein, der auch wirklich was tut, nicht nochmal printKette aufrufen..
	}

	public static void main (String[] args)
	{
		printKette('a', 3, 5);
	}
}
[/Java]


----------



## LuckyEric1986 (24. Nov 2009)

Aber wenn ich da ein System.out.println. rein schreibe, also folgendermaßen:

[Java]
// Weihnachtsbaum.java

public class Weihnachtsbaum
{
    static void printKette (char zeichen, int start, int laenge)
    {
        System.out.println("  aaaaa");
    }

    public static void main (String[] args)
    {
        printKette('a', 3, 5);
    }
}
[/Java]

dan isses ja irgendwie blödsinn oder?
Sinn soll doch sein, dass ich bei printKette('a', 3, 5) was ändere und damit auch die ausgabe änder... Oder?!


----------



## faetzminator (24. Nov 2009)

Ich würde da eher was wie folgendes vorschlagen:

```
static void printKette(char zeichen, int start, int laenge) {
    while (--start > 0) { // gibt [start-1] mal ein leerzeichen aus
        System.out.print(' ');
    }
    while ((laenge--) > 0) { // gibt [laenge] mal das zeichen <zeichen> aus
        System.out.print(zeichen);
    }
    System.out.println(); // neue zeile zum schluss
}
```


----------



## ARadauer (24. Nov 2009)

System.out.println("  aaaaa");
sollst du natürlich nicht schreiben!
Du sollst Code schreiben, der in Abhänigkeit der Paramter die ensprechende ausgabe macht...


----------



## LuckyEric1986 (24. Nov 2009)

Hehe, also...

Durch den Post von faetzminator bin ich nun mal soweit:

[Java]
// Weihnachtsbaum.java

public class Weihnachtsbaum
{
    static void printKette (char zeichen, int start, int laenge)
    {
        while (--start > 0);
        {
        	System.out.println(' ');
        }
        while (laenge-- > 0);
        {
        	System.out.println(zeichen);
        }
        System.out.println();
    }

    public static void main (String[] args)
    {
        printKette('a', 3, 5);
    }
}
[/Java]

Er gibt immerhin schon mal das 'a' aus, zwar noch nich so wie er das machen soll, aber immerhin.
Damit ich selber auf die Lösung komme, würd ich noch gern wissen warum man bei den beiden While's jeweils ein post bzw. predekrement macht....


----------



## SlaterB (24. Nov 2009)

weil sonst die Schleife ewig laufen würde? da wird gezählt, eine Aktion x mal wiederholt,
eine for-Schleife wäre sicher verständlicher,

ohne Schleifen, if-else, Klassen, Objekte, Methoden mit Parameter kann man kaum was programmieren


----------



## ARadauer (24. Nov 2009)

> zwar noch nich so wie er das machen soll


wie soll er es den machen?


----------



## LuckyEric1986 (24. Nov 2009)

Bada Boom bada Bäng!

[Java]

/* Weihnachtsbaum.java */

public class Weihnachtsbaum1
{
	static void printKette (char zeichen, int start, int laenge)
	{
		for(int i=0; i<start; i++)
		  System.out.print(' ');

		for (int i=0; i<laenge; i++)
			System.out.print(zeichen);

		System.out.println();
	}

	public static void main(String[]args)
	{
		printKette('a',3,6);
	}
}
[/Java]

Es funzt!


----------



## faetzminator (24. Nov 2009)

Ist aber laut deiner Vorgabe nicht korrekt. Es sollen nicht start sondern start-1 ' ' ausgegeben werden. also i auf 0 setzen. Und wo liegt da nun der Unterschied zwischen deiner und meiner Methode? Abgesehen davon, dass ich auf die zwei lokalen Variablen verzichte...


----------



## SlaterB (24. Nov 2009)

> Und wo liegt da nun der Unterschied zwischen deiner und meiner Methode?

das ist doch kein Wettstreit, 
und nebenbei ist deine Schleife unverständlich, ++ oder -- direkt in einem Vergleich sollte man nie verwenden,
ich selber würde das nicht sofort verstehen (ob nun die Schleife zahl-mal läuft oder ein mehr oder ein weniger), 
95% aller Schullehrer oder Gelegenheits-Java-Professoren ebensowenig 
und 100% würde auffallen, dass das kein Anfänger selbst geschrieben hat


----------



## faetzminator (24. Nov 2009)

LuckyEric1986 hat gesagt.:


> [...] zwar noch nich so wie er das machen soll, aber immerhin.



Es geht mir nur um das. Und ich sehe den Unterschied nicht, die beiden Möglichkeiten sind halt einfach Geschmackssache .


----------



## Quaxli (24. Nov 2009)

Die Lösung mit den for-Schleifen ist imho für einen Anfänger unter Umständen verständlicher.


----------

