Hey, also ich möchte die Berechnungen gerne in einen Algotihmus formen. Wie gehe ich da am besten vor??
Java:
int first = zahl %10;int second =(zahl - first)%100/10;int third =(zahl - first - second)%1000/100;int fourth =(zahl - first - second - third)%10000/1000;
Versuche erstmal, eine rekursive Form dafür zu finden. Du formulierst also Schritt `i` (mit i=0,1,2,3...) mittels des Ergebnisses von Schritt `i-1`. Hierbei versuchst du einfach die Berechnung von `first` innerhalb der Berechnung von `second` zu finden, was hier einfach ist, da die Variablen der Teilergebnisse ja schon so heißen. Dann musst du schauen, was denn eigentlich in Schritt `i` noch zusätzlich zu Schritt `i-1` hinzukommt. Das ist ja der Restoperator, der sich immer um eine Zehnerpotenz erhöht und der Divisor, der sich ebenfalls um eine Zehnerpotenz erhöht. Also z.B.:
Code:
f(0) = 0
f(i) = (zahl - f(i-1)) % 10^i / 10^(i-1)
Allerdings würde man dann sehen, dass dieser Algorithmus sehr ineffizient ist, für das, was eigentlich passiert (nämlich die Stellen der Zahl zurückgeben).
Man könnte es z.B. so lösen:
Java:
importjava.util.function.Consumer;publicclassSchleife{publicstaticvoidschleife(int zahl,Consumer<Integer> ergebnisse){for(; zahl !=0; zahl /=10)
ergebnisse.accept(zahl %10);}publicstaticvoidmain(String[] args){schleife(1234567,System.out::println);}}
Ich habe hier Consumer verwendet, weil nicht näher spezifiert wurde, wie denn die Teilergebnisse verarbeitet werden sollen.
Ich muss einen int Wert einlesen und als Ausgabe soll die Zahl zerlegt werden. Beispiel 1234 in 1,2,3,4.
Einen Consumer dürfen wir nicht verwenden, weil wir das noch nicht in unserer Vorlesung hatten.
Mir wurde heute nochmal mitgeteil, dass wir die Zahl durch Berechnungen zerlegen sollen.
Naja, du brauchst ja offensichtlich schonmal eine Schleife (da ihr Rekursion vermutlich auch nicht nutzen dürft).
Also überlege dir mal, was jede einzelne Schleifeniteration tun muss. Die nötigen Grundoperationen hast du ja schon alle verwendet.
Naja, die letzte Stelle einer Zahl z erhältst Du mit z % 10. Die letzte Stelle kannst Du "abschneiden", indem Du durch 10 dividierst:
Code:
1234 % 10 = 4
1234 / 10 = 123
Wenn Du das wiederholt ausführst, bekommst Du alle Stellen von z, beginnend von der niederwertigen Stelle. Wenn Du zeitgleich einen String bauen (der mit der höherwertigen Stelle beginnt) willst, musst Du diesen entsprechend von rechts nach links aufbauen, d. h. der String muss zu Beginn der Schleife alle Stellen rechts von der aktuellen enthalten...