Sektglasaufgabe aus einem Programmierbuch

Hi Leute,
ich scheitere aktuell an dieser Programmieraufgabe. Mir gelingt es nicht den Sektkelch in einer umgedrehten Pyramidenform mithilfe einer Schleife zu zeichnen.

12408

Mein Code bis jz:

Java:
public class Sektglas {

    public static void zeichneSektglas(int stielLänge) {
        zeichneKelch(stielLänge);
        zeichneStiel(stielLänge);
        zeichneFuß(stielLänge);
    }

    public static void zeichneKelch(int stielLänge) {
        for (int i = 0; i < stielLänge * 2; i++) {
            zeichneLeer();
            for (int j = 0; j < stielLänge * 2; j++) {
                zeichneStern();
            }
            System.out.println();

        }
    }

    public static void zeichneFuß(int stielLänge) {
        for (int i = 0; i < stielLänge * 2 + 2; i++) {
            zeichneStern();
        }

    }

    public static void zeichneStiel(int stielLänge) {
        for (int i = 0; i < stielLänge; i++) {
            for (int j = 0; j < stielLänge; j++) {
                zeichneLeer();
            }
            zeichneStern();
            System.out.println();
        }
    }

    public static void zeichneLeer() {
        System.out.print(" ");
    }

    public static void zeichneStern() {
        System.out.print("*");
    }

    public static void main(String args[]) {
        zeichneSektglas(3);
    }
}
 
Was ist daran so schwer? Was verstehst du nicht?

Kleiner Anstupser:
Java:
for(int i = 1; i < 5; i++){
    for(j = 1; j < i; j++){
        System.out.print("+");
    }
    System.out.println("");
}
 
Was ist daran so schwer? Was verstehst du nicht?

Kleiner Anstupser:
Java:
for(int i = 1; i < 5; i++){
    for(j = 1; j < i; j++){
        System.out.print("+");
    }
    System.out.println("");
}

Super, einen fehlerhaften Code als Antwort hinterlegen der weder die Syntax erfüllt noch die Forderung der Aufgabe.
Danke für nichts, aber wie ein Allwissender daherreden ist kannste gut.
 
Ich wollte eigentlich nur wissen, was genau du nicht verstehst. Warum bist du so angepisst? Dachtest du, du bekommst jetzt die Fertiglösung? Vergiss das, DU sollst die Aufgabe lösen, nicht wir.
 
Was ist daran so schwer? Was verstehst du nicht?
@White_Fox kann sein das es etwas falsch aufgenommen wurde. Wenn man es so liest und etwas betont hört es sich herablassend an :(
Vielleicht deswegen dann auch diese "angepisste" Antwort.

Doch @White_Fox hat recht. Wenn wir nicht verstehen wobei du eine Frage hast ist es sehr schwer zu Helfen.

Im Grunde geht es bei solchen Aufgaben immer um das Üben von Kontrollstrukturen :)
Wenn man das ganze einmal verstanden hat sind die Aufgaben nicht mehr ganz so schwer.
Ich habe mir selbst die Aufgabe nicht angeschaut wollte hier nur mein Senf dazu geben um die Lage etwas zu entschärfen :)

Deswegen wenn du so freundlich wärst @forty4seven uns zu erklären wo genau es hängt wäre es einfacher mit der Hilfe.
Das wir keine ganzen Programme posten ist auch nicht Böse gemeint oder ein Angriff gegen dich Persönlich, sondern nur LIEB gemeint. Denn davon lernt man nicht so viel wie wenn man es selbst hin bekommen hat! Ist so. In der Mathematik ist es ja genauso z. B.

Hoffe ich konnte etwas Helfen wenn nicht verhaut mich :D

LG

PS: Hab mir die Aufgabe durchgelesen und finde sie SUPER :)
An deiner Stelle, ich gehe davon aus du hast erst Angefangen mit Java (Programmierung), solltest du es einfach erst einmal alles in der main (public static void main(String[] args)) rein Texten :)
Danach kannst du wenn du ein Sektglas hin bekommen hast es Aufteilen in die Verschiedenen Methoden.

___
Das würde auch das Verbessern deines Codes bzw. durch blicken deines derzeitige Codes vereinfachen. Denn wenn ich für eine solche Aufgabe 5-6 verschiedene Methoden sehe komme ich nicht mehr mit :D
Natürlich kann man so vorgehen aber man sollte auch mal die Kirche im Dorf lasen :p mit Teile und Herrsche :D
 
Zuletzt bearbeitet:
Als erstes hast Du übersehen, dass der Durchmesser der Kelchöffnung gleich dem Doppelten der Länge des Stiels zzgl. 1 entsprechen soll.

Im Beispiel oben hat der Stiel eine Länge 4. Öffnungsdurchmesser = 2*4+1 = 9. In jeder weiteren Zeile werden es 2 Sternchen weniger, die durch Leerzeichen ersetzt werden - auf jeder Seite gleich viele. Die Zahl der Leerzeichen auf der linken Seite des Kelchs beträgt demnach 0 an der Öffnung, in der nächsten Zeile 1, dann 2, dann 3.

Wenn Du jetzt Deinen zeichneLeer- und zeichneStern-Methoden einen Parameter spendierst, der die Anzahl angibt, wird es recht einfach.

Pseudocode:
Code:
durchmesser := 2*stiellaenge + 1;
for (int zeile = 0; zeile < stiellaenge; zeile++) {
    zeichne (zeile) Leerzeichen
    zeichne (durchmesser - 2 * zeile) Sterne
    zeichne (zeile) Leerzeichen // = die auf der rechten Seite (optional)
    beginne eine neue Zeile
}
Analog dazu überlegst Du Dir jetzt wie viele Leerzeichen auf jeder Seite des Stiels sein müssen. Das wars.
 
Immer so viel Text zu solchen Pups Fragestellungen...

Hier wäre die Stream Lösung:
Java:
    int n = 9;
    IntStream.iterate(0, i -> i + 1).limit(n).forEach(a -> {
      IntStream.iterate(0, i -> i + 1).limit(Math.min(a, n / 2)).forEach(b -> System.out.print(" "));
      IntStream.iterate(0, i -> i + 1).limit(Math.max(n - a * 2, 1)).forEach(c -> System.out.print("*"));
      System.out.println();
    });
 
Achsooo, für n können wir noch annehmen:
Java:
int n = IntStream.of(4).map(e -> 2 * e + 1).findFirst().getAsInt();

"Pups Fragestellungen", das meinte ich natürlich nicht so, so habe nicht gesehen dass diese Aufg. eines Buchs entnommen ist.... Dort muss es ja etwas beigebracht werden.

Desweiteren.... habe ich den Sektglasfuß/-Sockel ganz vergessen... das war mir zu trivial (entweder mit if-else oder mit einer nachfolgenden Anweisung).
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben