Dreieck

LeonInfo19

Bekanntes Mitglied
Hallo,
ich will ein umgekehrtes gleichschenkliges Dreieck aus Sternen:
Als Eingabe habe ich die Anzahl der Sterne auf Hypotenuse zur Verfügung.
Z.b für n=3 habe ich:
*
**
***
**
*
D.h also die die letzte Spalte ist die Hypotenuse.
Wie kann ich das lösen. Ich komme so einfach nicht dahinter.
Hat jmd einen Tipp?
 

LeonInfo19

Bekanntes Mitglied
Code:
  *
 **
***
 **
  *
Das ist für den Fall n=5.
Die letzte Spalte ist für die Anzahl der Sterne auf der Hypotenuse.
Wie kriege ich sowas hin mithilfe von eher einfachen Strukturen wie for, while-Schleife.
 

httpdigest

Top Contributor
Hättest du nicht einfach schreiben können: "Die rechte Spalte soll 'n' Sterne in der Vertikalen haben und das Ganze soll so aussehen [gefolgt von einem kleinen Beispiel, wie du es ja schon geschrieben hast]." oder "Die rechte Spalte soll einfach 'n' Sterne übereinander haben." gefolgt von "Jede Spalte soll zwei Sterne weniger in der Vertikalen haben als die Spalte direkt rechts daneben und die Sterne sollen zentriert/mittig ausgerichtet sein."
Dass das Ganze jetzt nun ein Dreieck darstellen soll, was auch noch rechtwinklig ist, ist fragwürdig. Das mit Hypothenuse verwirrt nur.
 

httpdigest

Top Contributor
Eine Hypothenuse gibt es nur bei einem rechtwinkeligen Dreieck, soweit ich weiß.
Deswegen die Verwirrung.
Was wäre denn die Hypothenuse bei einem gleichschenkligen und sogar gleichseitigen Dreieck, also mit nur 60° Winkeln?
 

mihe7

Top Contributor
@LeonInfo19 die Hypotenuse existiert nur im rechtwinkligen Dreieck; damit haben wir in Deiner Aufgabenbeschreibung zwei widersprüchliche Aussagen. Es geht einfach nur darum, den Widerspruch aufzulösen. Stimmt das Bild oben mit der Angabe, dass hier n=5 ist?
 

mihe7

Top Contributor
Wenn Du Dein Bild ansiehst, dann hast Du ein Rechteck, das aus Leerzeichen und Sternchen besteht. Das Rechteck hat die Höhe n und die Breite (n+1)/2.

Das Grundgerüst sieht nun so aus:
Java:
int breite = (n+1)/2; 
for (int i = 0; i < n; i++) {
    // In diesem Block wird jeweils eine Zeile des Dreiecks ausgegeben.
    // Dazu wird z. B. erst die Anzahl der Leerzeichen bzw. Sternchen
    // berechnet.
    // Dann: Leerzeichen ausgeben, Sternchen ausgeben, 
    // Zeile abschließen
}

Der Kommentar soll nur deutlich machen, was passiert. Man ersetzt ihn durch sinnvolleren Code:
Java:
int breite = (n+1)/2;
for (int i = 0; i < n; i++) {
    // Anzahl Sternchen und Leerzeichen berechnen
    int sternchen = 0; 
    int leerzeichen = breite - sternchen;

    // Leerzeichen ausgeben
    for (int j = 0; j < leerzeichen; j++) {
        System.out.print(" ");
    }
    // Sternchen ausgeben
    for (int j = 0; j < sternchen; j++) {
        System.out.print("*");
    }
    // Zeile abschließen
    System.out.println();
}

Im Code ist die Anzahl der Sternchen mit 0 angegeben. Die Aufgabe, die richtige Anzahl zu berechnen, überlasse ich Dir.
 

LeonInfo19

Bekanntes Mitglied
Die Anzahl der Sterne hängt von der aktuellen Höhe ab, also muss die Variable auf i gesetzt werden. Muss dann nicht egtl die äußere for-schleife bis n+1/2 laufen und dann brauche ich nochmal das gleiche Gerüst nur mit vertauschen Wollen, z.b Leerzeichen=i, um den unteren Teil des Dreieck zu bekommen?
 

mihe7

Top Contributor
Muss dann nicht egtl die äußere for-schleife bis n+1/2 laufen und dann brauche ich nochmal das gleiche Gerüst nur mit vertauschen Wollen, z.b Leerzeichen=i, um den unteren Teil des Dreieck zu bekommen?
Das ist eine Möglichkeit.

Die andere wäre einfach diesen Umstand in der Berechnung zu berücksichtigen. Du könntest z. B. mal ganz einfach eine if-Abfrage einbauen...
 

mihe7

Top Contributor
Ja, zum Beispiel. Die Bedingung solltest Du Dir aber nochmal ansehen... Probiers einfach aus. Kostet ja nichts :)
 

ocsme

Top Contributor
Echt schöne Aufgabe hab Sie auch mal gemacht :)
Und auch danke mihe7 für den Quelltext von oben ich hätte das etwas anders gemacht doch deine Variante ist deutlich besser.
Ich weiß nur nicht ob meine wirklich effizient ist :( würde sie gerne Posten doch will Ihm ja nicht gleich die Lösung zeigen sonst lernt man es nicht :(!!!

LG
 

LeonInfo19

Bekanntes Mitglied
Hallo, du kannst die Lösung ruhig zeigen :). Ich habe es erstmal so:

Java:
int breite=(hoehe+1)/2;
for(int i=1; i<breite;i++) {
    int sterne=i;
    int leerzeichen=breite-sterne;
    for(int j=0;j<leerzeichen;j++) {
        System.out.print(" ");
     }
         
     for(int j=0;j<sterne;j++) {
         System.out.print("*");
      }
      System.out.println();
}
     
     
 for(int i=0; i<=breite;i++) {
      int leerzeichen=i;
      int sterne=breite-leerzeichen;
         
      for(int j=0;j<leerzeichen;j++) {
           System.out.print(" ");
      }
      for(int j=0;j<sterne;j++) {
            System.out.print("*");
        }
        System.out.println();
 }

Wen ich das mit if mache, habe ich trotzdem keinen Vorteil, denn ich muss die beiden for-Schleifen in der for-Schleife trotzdem vertauschen. Oder übersehe ich etwas?
 

ocsme

Top Contributor
Ich hab deinen Quellcode nur überflogen aber erstmal ist die Hauptsache das es läuft :)
Hier ist meines das habe ich mit if else gemacht dann brauchst du die for Schleifen nicht 2x :)

Java:
int n=9;
        int breite=(n+1)/2;
        int sternchen=0;
        for(int i=0;i<n;i++) {
            if(i<breite)
             sternchen = i+1;
            else sternchen = n-i;
           
            int leerzeichen = breite - sternchen;

            for(int j=0;j<leerzeichen;j++)
                System.out.print(" ");
           
            for(int j=0;j<sternchen;j++)
                System.out.print("*");
           
            System.out.println();
        }

Ich weiß nur nicht zu 100% ob es so richtig ist :p die genau Aufgabenstellung kenne ich ja nicht :)
 

LeonInfo19

Bekanntes Mitglied
Danke für deinen Code:) Jetzt sehe ich, was ich falsch gedacht habe.
Vielen Dank oscme:)
Vielen Dank mihe7 für deine vorherige Unterstützung:)
 

mihe7

Top Contributor
ich hätte das etwas anders gemacht
Poste doch mal Deinen Ansatz. Es gibt praktisch immer verschiedene Möglichkeiten, ein Problem zu betrachten und zu lösen.

Wen ich das mit if mache, habe ich trotzdem keinen Vorteil,
Der Vorteil besteht darin, Code nicht mehrfach schreiben und später warten zu müssen. Wichtig ist aber erstmal, überhaupt ein Gespür dafür zu bekommen, wie man Probleme angeht.

Wir haben jetzt hier zwei Varianten gesehen: zwei for-Schleifen und eine for-Schleife mit if-Abfrage. Wie oben geschrieben: es gibt fast immer mehrere Möglichkeiten, daher will ich noch eine dritte Variante beisteuern.

Man kann die Anzahl der Sternchen/Leerzeichen direkt berechnen. Wenn man sich die Zahl der Leerzeichen nämlich ansieht, ist dies eine Zahl, die bei breite-1 beginnt, immer kleiner wird, bis sie "irgendwann" 0 erreicht. Man könnte also mal hergehen und von breite-1 einfach i abziehen. Dann würde für n=5 folgendes passieren:
Code:
i  breite-1-i
0  2-0 = 2
1  2-1 = 1
2  2-2 = 0
3  2-3 = -1
4  2-4 = -2
Im Ergebnis hat man am Ende jeder Zeile also die Zahl der Leerzeichen, nur das Minuszeichen stört; das bekommt man mit der Betragsfunktion weg:
Code:
int leerzeichen = Math.abs(breite - 1 - i);
int sternchen = breite - leerzeichen;
 

ocsme

Top Contributor
mihe7 leider habe ich das nicht mehr.
Ich hatte es zuerst Probiert und hatte nur das hier raus:
*
**
***

Dann hab ich hier weiter gelesen und habe dein Entwurf gesehen und ihn mir angeschaut. Da kamst du ja direkt auf die Geniale Idee mit der Breite das wäre mir so nicht eingefallen bzw. wenn dann erst viel später :D

aber hab es ja auch hin bekommen :D

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_so_far_away_ pascalsches Dreieck Zentrierung. Java Basics - Anfänger-Themen 12
laxla123 Dreieck erstellen Java Basics - Anfänger-Themen 1
JustAProgrammer Ein Dreieck mit Arrays erstellen Java Basics - Anfänger-Themen 2
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
G Magisches Dreieck Java Basics - Anfänger-Themen 2
F Pascalsches Dreieck mit Rückgabewert Java Basics - Anfänger-Themen 2
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
S Überprüfung rechtwinkliges Dreieck Java Basics - Anfänger-Themen 4
Z Warum kein Dreieck aus Sternen? Java Basics - Anfänger-Themen 9
O Erste Schritte Pascalsche Dreieck Java Basics - Anfänger-Themen 3
H Stern Dreieck (Buch: Grundkurs Programmieren) Java Basics - Anfänger-Themen 2
L Pascalsches Dreieck Java Basics - Anfänger-Themen 4
D Pascal'sches Dreieck Java Basics - Anfänger-Themen 6
N Methoden Gleichseitiges Dreieck erstellen Java Basics - Anfänger-Themen 8
U Dreieck Java Basics - Anfänger-Themen 22
E Dreieck zeichnen Java Basics - Anfänger-Themen 3
1 2D-Array, dass das pascalsche Dreieck berechnet Java Basics - Anfänger-Themen 2
L Dreieck Kreis Java Basics - Anfänger-Themen 12
B Dreieck Flächenberechnung Java Basics - Anfänger-Themen 2
B Java Grafikprogrammierung Dreieck Java Basics - Anfänger-Themen 6
I Umgedrehtes Dreieck Java Basics - Anfänger-Themen 3
M Dreieck erstellen Java Basics - Anfänger-Themen 17
J Dreieck Ausgeben Java Basics - Anfänger-Themen 3
R Pascalsche Dreieck Java Basics - Anfänger-Themen 4
R Pascalsche Dreieck Java Basics - Anfänger-Themen 8
C Pascalsches Dreieck: Ausgabeproblem Java Basics - Anfänger-Themen 10
K pascalsches Dreieck Java Basics - Anfänger-Themen 8
H Compiler-Fehler Pascalsche Dreieck Java Basics - Anfänger-Themen 2
M Pascalsches Dreieck Java Basics - Anfänger-Themen 12
M Dreieck prüfen Java Basics - Anfänger-Themen 8
W Pascalsches Dreieck Java Basics - Anfänger-Themen 19
E Pascalsche Dreieck aus Java openbook Java Basics - Anfänger-Themen 3
B Bitte um Hilfe es geht um Array + Punkte wie Dreieck,Fläche etc. Java Basics - Anfänger-Themen 12
D Pascalsches Dreieck Java Basics - Anfänger-Themen 9
H Dreieck aus Zeichen Java Basics - Anfänger-Themen 4
L Paskalsche Dreieck im Array Java Basics - Anfänger-Themen 2
T Pascalsche Dreieck ERKLÄRUNG Java Basics - Anfänger-Themen 6
U Rekursive lösung von pascal dreieck Java Basics - Anfänger-Themen 11
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
Antoras Dreieck zeichnen Java Basics - Anfänger-Themen 2
A Problem Gleichseitiges Dreieck aus Sternchen Java Basics - Anfänger-Themen 7
G Pascalsche Dreieck in Dreieckform Java Basics - Anfänger-Themen 2
X Pascalsche Dreieck Java Basics - Anfänger-Themen 6
G Dreieck mit Java Apllet Java Basics - Anfänger-Themen 10
V Dreieck spiegeln Java Basics - Anfänger-Themen 3
L Dreieck soll Farbe ändern Java Basics - Anfänger-Themen 4
L Dreieck füllen Java Basics - Anfänger-Themen 4
X Dreieck ausgeben Java Basics - Anfänger-Themen 3
B Hindergrundfarbe in JPanel und Dreieck zeichnen Java Basics - Anfänger-Themen 4
D Das Problem mit dem Dreieck. Java Basics - Anfänger-Themen 5
B auf der Spitze stehendes Dreieck mit for-Schleifen Java Basics - Anfänger-Themen 6
lan2711 Anfänger: Konstruktion Dreieck Java Basics - Anfänger-Themen 2
G Pascalsches Dreieck Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben