Sanduhr (width)

  • Themenstarter Gelöschtes Mitglied 68906
  • Beginndatum
G

Gelöschtes Mitglied 68906

Gast
Guten Mittag,
ich habe eine Bitte. Könnt ihr mir bitte bei dieser Aufgabe helfen, ich verstehe leider noch nicht viel von Java und mache mich nur sehr langsam vertraut mit diesen Aufgaben..
Implementieren Sie eine Methode printSanduhr(int width), das eine Sanduhr in der Konsole ausgibt. Die Größe soll über den Parameter width festgelegt werden. Dieser legt die Breite der ersten Zeile in Anzahl der Zeichen fest, wobei sich in jeder Zeile die Anzahl der Zeichen um zwei reduziert bzw. erhöht, und diese entsprechend eingerückt werden (siehe Beispiele). Testen Sie Ihr Programm für width=3,4,9. Die Methode soll für beliebige Werte von width funktionieren. Beispiele: width=3: width=4: width=5

Könnt ihr mir bitte helfen ?
 
K

kneitzel

Gast
Woran scheitert es denn? Was fehlt Dir? Gib uns Ansätze, wo man Dich führen kann und dann unterstützen wir Dich.

Generell wäre bei jeder Aufgabe: Hast Du diese verstanden? Sprich: Kannst Du so eine Sanduhr aufmalen? Nimm Dir Stift und Zettel (z.B. mit Kästchen) und dann Mal die Sanduhr. Dabei ist eine Einschränkung, dass Du bereits gemalte Kästchen nicht berücksichtigen kannst, d.h. Du bist in einer Zeiler und kannst keine anderen Zeilen auswerten. Du kannst:
- Ein Kästchen füllen (Mit X oder Leezeiche)
- In die nächste Zeile wechseln (Dann bist Du auch automatisch am Anfang)

Kriegst Du die Sanduhr hin? Wenn ja: Wie?

==> Es geht also nur darum, den Algorithmus zu begreifen. Java, Computer, ... spielt alles noch keine Rolle.
 
G

Gelöschtes Mitglied 68906

Gast
Woran scheitert es denn? Was fehlt Dir? Gib uns Ansätze, wo man Dich führen kann und dann unterstützen wir Dich.

Generell wäre bei jeder Aufgabe: Hast Du diese verstanden? Sprich: Kannst Du so eine Sanduhr aufmalen? Nimm Dir Stift und Zettel (z.B. mit Kästchen) und dann Mal die Sanduhr. Dabei ist eine Einschränkung, dass Du bereits gemalte Kästchen nicht berücksichtigen kannst, d.h. Du bist in einer Zeiler und kannst keine anderen Zeilen auswerten. Du kannst:
- Ein Kästchen füllen (Mit X oder Leezeiche)
- In die nächste Zeile wechseln (Dann bist Du auch automatisch am Anfang)

Kriegst Du die Sanduhr hin? Wenn ja: Wie?

==> Es geht also nur darum, den Algorithmus zu begreifen. Java, Computer, ... spielt alles noch keine Rolle.
Hallo, leider verstehe ich nicht mal richtig den Ansatz :( ich verzweifle komplett schon
 
K

kneitzel

Gast
Du hast doch auch Beispiele gezeigt bekommen. Kannst Du mit Stift und Papier so Sanduhren malen?

Also vergiss Computer und alles drumherum. Nur Stift und Papier sind wichtig.
 
G

Gelöschtes Mitglied 68906

Gast
Du hast doch auch Beispiele gezeigt bekommen. Kannst Du mit Stift und Papier so Sanduhren malen?

Also vergiss Computer und alles drumherum. Nur Stift und Papier sind wichtig.
Also könnte ich in der ersten Zeile 5 mal ein x machen und dann darunter wird es immer auf jeder seite auf eins reduziert. Bis in der Mitte nur ein X vorhanden ist. Danach werden ja die X auf jeder Seite dazu addiert , bis zu der gleichen Anzahl, wie in der ersten Zeile ... korrekt ?
 
K

kneitzel

Gast
Ja genau, das ist schon ein guter Ansatz. Aber das mit den "auf jeder Seite um eins reduziert" müsstest Du einmal sudführen. Wenn Du das mit Stift uns Zettel machst: Was bedeutet das für die Zeile? Sieht das dann so aus?
*****
***
*
 
G

Gelöschtes Mitglied 68906

Gast
Ja genau, das ist schon ein guter Ansatz. Aber das mit den "auf jeder Seite um eins reduziert" müsstest Du einmal sudführen. Wenn Du das mit Stift uns Zettel machst: Was bedeutet das für die Zeile? Sieht das dann so aus?
*****
***
*
Die * müssten ja mittig bleiben, also :
*****
***
*

so ungefähr, also dass alles mittig untereinander ist
 
K

kneitzel

Gast
Ok, die Anzeige klappt nicht direkt im Forum - wenn dann als Code posten. Also über den </> Knopf:
Code:
*****
 ***
  *

Was hast Du denn gemacht, als Du das eingegeben hast? Damit so etwas entstanden ist? (Ich unterstelle mal einfach, dass das, was ich jetzt gezeigt habe, bei Dir eingegeben wurde).
 
G

Gelöschtes Mitglied 68906

Gast
Ok, die Anzeige klappt nicht direkt im Forum - wenn dann als Code posten. Also über den </> Knopf:
Code:
*****
 ***
  *

Was hast Du denn gemacht, als Du das eingegeben hast? Damit so etwas entstanden ist? (Ich unterstelle mal einfach, dass das, was ich jetzt gezeigt habe, bei Dir eingegeben wurde).
Naja ich habe immer eine neue Zeile angefangen und dann ein Leerzeichen gelassen, und dadurch wird es ja reduziert..
 
K

kneitzel

Gast
Genau, der Schritt ist also wichtig. Du hast dann auf einer Seite ein * durch ein Leerzeichen ersetzt.

Kannst Du dann aufschreiben, wie viele Leerzeichen / Sternchen du jeweils geschrieben hast?
- Dabei ist der erste Schritt: Schreib es Dir einfach einmal auf.
- Nächster Schritt: Finde eine Regel. (Die hast Du prinzipiell schon genannt)
-> Dann kannst Du es formulieren.Du hast also als Eingabe eine Zahl, die die Anzahl der Sternchen angibt. Und man merkt sich die Anzahl der Leerzeichen. Dies sind am Anfang .......... Dann machst Du dieses und jenes bis eine Bedingung eintritt.
-> Wenn Du sprachlich sowas formuliert hast: Dann spiel es durch. Das ist dann eine Verifizierung. Mag alles kindisch sein, aber das sind Dinge, die genau so später im Kopf ablaufen müssten und auch werden. Also ruhig wirklich das Spielchen mitspielen ...

Dann hast Du das, was die obere Hälfte malt. Das muss man dann umdrehen. Kannst Du 1:1 so vorgehen, wie wir das mit der oberen Hälfte durchgespielt haben.

Und erst wenn die den Algorithmus soweit haben, dann überlegen wir uns, wie wir den "übersetzt" bekommen in Java.
 
G

Gelöschtes Mitglied 68906

Gast
Genau, der Schritt ist also wichtig. Du hast dann auf einer Seite ein * durch ein Leerzeichen ersetzt.

Kannst Du dann aufschreiben, wie viele Leerzeichen / Sternchen du jeweils geschrieben hast?
- Dabei ist der erste Schritt: Schreib es Dir einfach einmal auf.
- Nächster Schritt: Finde eine Regel. (Die hast Du prinzipiell schon genannt)
-> Dann kannst Du es formulieren.Du hast also als Eingabe eine Zahl, die die Anzahl der Sternchen angibt. Und man merkt sich die Anzahl der Leerzeichen. Dies sind am Anfang .......... Dann machst Du dieses und jenes bis eine Bedingung eintritt.
-> Wenn Du sprachlich sowas formuliert hast: Dann spiel es durch. Das ist dann eine Verifizierung. Mag alles kindisch sein, aber das sind Dinge, die genau so später im Kopf ablaufen müssten und auch werden. Also ruhig wirklich das Spielchen mitspielen ...

Dann hast Du das, was die obere Hälfte malt. Das muss man dann umdrehen. Kannst Du 1:1 so vorgehen, wie wir das mit der oberen Hälfte durchgespielt haben.

Und erst wenn die den Algorithmus soweit haben, dann überlegen wir uns, wie wir den "übersetzt" bekommen in Java.



1.Schritt
*****
_***_
_ _ * _ _
_***_
*****

korrekt ?

2.Schritt
Jede Zeile wird zu beginn und am Ende ein Leerzeichen addiert
Die erste Zeile ist ohne Leerzeichen, die leerzeichen werden solange und sooft addiert bis die Sternchen nur noch 1 beträgt.

ist das so richtig `? nur wie krieg ich Das in ein Java programm

2.Schritt
 

Jw456

Top Contributor
Die einfachste Lösung währe für jede Zeile einen println zu benutzen mit Freizeichen und Stern.
So wie du es hier beim schreiben auch machst.

Sinnvoller und Variabler ist es mit einer Schleife die dir die Freizeichen und Sterne für jede Zeile setzt.
 
K

kneitzel

Gast
Also wenn Du nur schaust, wie viele Zeichen du jeweils hast, dann hast du:
Zeile / Leerzeichen / Sternchen:
1 / 0 / 5
2 / 1 / 3
3 / 2 / 1
fertig

Also wenn Du von Zeile zu Zeile gehst, dann sieht es so aus: Leerzeichen immer +1, Sternchen -2
Das ganze geht so lange, bis Sternchen einen bestimmten Wert erreicht hat (Den kannst Du dir noch überlegen. dazu einfach mal bei 3 und 4 Sternchen schauen, wann da jeweils das Ende sein sollte Deiner Meinung nach.)

Bei dem Rückweg muss man das nur auf den Kopf stellen.
Zeile / Leerzeichen / Sternchen:
1 / 2 / 1
2 / 1 / 3
3 / 0 / 5
fertig

Die Regeln sind offensichtlich und Ende ist, wenn Anzahl der Sternchen dem Anfangswert entspricht.

Damit hat man dann den Algorithmus:

AnzahlLeerzeichen := 0
AnzahlSternchen := Startwert
Schleife:
-- Male AnzahlLeerzeichen Leerzeichen
-- Male AnzahlSternchen Sternchen
-- Male Zeilenumbruch
-- AnzahlLeerzeichen := AnzahlLeerzeichen + 1
-- AnzahlSternchen := AnzahlSternchen - 2
bis AnzahlSternchen <= DeinerGefundenGrenze

Sowas kann man dann auch für den zweiten Teil machen.

Und dann kann man das 1:1 übersetzen. Dabei bitte fleissig neue Methoden erstellen:
Java:
public static void maleSanduhr(int startBreite) {
    maleSanduhrOberenTeil(startBreite);
    maleSanduhrUnterenTeil(startBreite);
}

Und ein Male AnzahlLeerzeichen Leerzeichen kann dann eine Methode werden a.la.
public static void maleZeichen(char zeichen, int anzahl) { ... }

So hast Du dann eine kleine Hand von Methoden, die alle kurz und übersichtlich sind und der ganze Code ist gut verständlich.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Ähnliche Java Themen

Neue Themen


Oben