Anfänger braucht Hilfe mit Java, habe 2 Fragen?
Hallo Leute,
wie schon im Titel steht hätte ich 2 Fragen, also:
- Habe eine Programm zu programmieren welches feststellt ob die gegebene Zahl eine narzisstische Zahl ist. Jedoch bleib ich schon ganz am Anfang stecken, da wir weder die Klassen Math noch String verwenden dürfen. Wie kann ich z.B. die Zahl 153 auseinander nehmen, damit ich die 1, 5 und die 3 habe? Ich habe mir gedacht die Zahl z.B. durch 100 zu teilen dann hätte ich ja schon die 1 mit Nachkommastellen, welche ich aber abschneiden müsste. Könnte ich die Klasse String verwenden wäre es wahrscheinlich etwas leichter. Bin ich hier auf dem richtigen Weg?
- Bei einer anderen Aufgabe müssen wir einen "Rautengenerator" programmieren. Habe ein Bild angehängt damit die Frage etwas verständlicher ist. Mit dem Scanner lese ich eine ungerade Zahl ein (bei geraden Zahlen soll es abbrechen, soweit so gut), mit der ich die Höhe der Raute angebe. Ganz rechts wäre mit Höhe 1, Mitte mit Höhe 5 und links mit Höhe 11. Aber mit was genau fange ich hier an? Meine Überlegung war 2 for Schleifen, mit der einen gebe ich die Zeilen an und mit der 2 verschachtelten Schleife zeichne ich die Rauten. Wäre das soweit korrekt?
Ich bitte hier nicht um fix fertige Lösungen sondern um ein paar Tipps bzw. Lösungsansätze wie ich hier vorgehen soll, da mich diese Aufgaben in den Wahnsinn treiben, wenn ich noch länger darüber grüble.
MfG
Josef
5 Antworten
Erste Frage: Wenn du die Zahl nicht in einem String umwandeln willst, dann benutze Modulo (%), um deine Zahlen zu bekommen. Modulo gibt bei einer Division den Rest aus.
153 % 100 = 53
Ansonsten würde ich einfach die Zahl in einem String verwandeln und dann mit einem Split jede Ziffer in einem Array abspeichern.
Zweiten Frage: Ich bin der gleichen Meinung, dass du 2 For-Schleifen benutzen solltest. Meine Erklärung: Mit der einen kannst du die Zeichen in der x-Achse (Breite)ausgeben, mit der anderen in der y-achse (Höhe).
Was ich machen würde ist die Schleife, die in der y-Achse zeichnet, in die andere Schleife integrieren. Ich setze die Zeichen zuerst in der Höhe und dann gehe ich einen Schritt weiter nach rechts.
Hoffe, dass dies nachvollziehbar ist. Wenn du Hilfe brauchst, kannst ja nachfragen.
Schau mal hier: https://stackoverflow.com/a/36068042/5759837
Ich kann dir aber nicht erklären, wie das geht XD
1) Versuche es einmal mit Division durch Rest (Modulo) mit dem Divisor 10. Das Abschneiden der Kommazahlen kannst du implizit regeln lassen, indem du nur mit Integer-Datentypen arbeitest.
Mit String-Zerlegung klappt es zwar auch, ist aber wirklich nicht schön.
2) Hört sich gut an, doch beachte auch die Anzahl der Leerzeichen zwischen den Rauten.
Zu Aufgabe 1:
Die einzelnen Zahlen kannst du über eine Modulo-Logik abgreifen:
do {
arr[i] = number % 10;
number /= 10;
i++;
} while (number != 0);
Codebeispiel ist hier geklaut ;) Link
Aufgabe 2:
Auch wenn ich deiner Beschreibung
Ganz rechts wäre mit Höhe 1, Mitte mit Höhe 5 und links mit Höhe 11.
leider gänzlich nicht folgen kann, solle deine Herangehensweise mit den zwei for-Schleifen nicht gerade falsch sein. Zumindest wenn ich mit die Bilder so ansehe.
Hallo Josef,
Rekursion und/oder der Modulo Operator sind vielleicht Deine Freunde für Aufgabe 1.
Bei Aufgabe 2 habe ich nun nicht nachgedacht, 2 Schleifen tönen aber plausibel.
viel spass