Berechnung zu einer Schleife formen

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:
import java.util.function.Consumer;
public class Schleife {
  public static void schleife(int zahl, Consumer<Integer> ergebnisse) {
    for (; zahl != 0; zahl /= 10)
      ergebnisse.accept(zahl % 10);
  }
  public static void main(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.
 
Zuletzt bearbeitet:
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.
 
Ich muss einen int Wert einlesen und als Ausgabe soll die Zahl zerlegt werden. Beispiel 1234 in 1,2,3,4.
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...
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben