Java int-Zahl in Ziffern zerlegen?
Die Aufgabe im Bild ist zu lösen. Die Quersumme wird in dem Programm bereits berechnet soweit also kein Problem. Da ich jedoch noch nicht viel Ahnung von Java hab stellen sich mir jetzt 2 Probleme:
- Kann man beim Scanner einen bestimmten Zahlenbereich (wie in der Aufgabe) festlegen?
- Wie zerlege ich den eingegebenen Wert in die einzelnen Ziffern damit ich ihn wie in der Aufgabenbeschreibung ausgeben kann?
Ich hab zu 1. nichts im Internet gefunden und zu 2. viel aber das hat alles nicht richtig funktioniert und verstanden habe ich es auch nicht gibt es da eine ganz simple Möglichkeit?
3 Antworten
1:
Mache eine if-Abfrage, ob die eingelesene Zahl im festgelegten Wertebereich liegt und gib eine Error-Meldung aus, wirf eine Exception, was immer du willst, wenn sie es nicht tut.
Ich weiß jetzt nicht inwiefern "lesen Sie eine Zahl im Wertebereich" andeutet, ob der Scanner das überhaupt durchgehen lassen dürfen soll, aber ich denke, hier ist es ok.
2:
Mach aus dem eingelesenen Integer einen String. (z.B. mit Integer.toString(i)) Jetzt kannst du Buchstabe für Buchstabe durchgehen, die Zahl auf der Konsole ausgeben, die einzelne Ziffer wieder in einen Integer umwandeln, um einzelne Ziffern zu bestimmen, was du willst.
Hässlich, aber würde klappen. Vielleicht kriegst du ja eine elegantere Methode raus.
durchgehen lassen dürfen soll
Gut gemacht, Plokapier, echt gut gemacht.
- Du könntest nach der Eingabe überprüfen, ob es sich um eine positive, ganze Zahl handelt und dahingehend entweder das Programm fortführen oder den Eingabedialog mit Fehlermeldung erneut ausgeben.
- In einzelne Ziffern zerlegt man mit %10 (modulo 10) und anschließender ganzzahliger Division durch 10. 15%10 ist beispielsweise 5 und 15/10 ist 1. Dann wieder von vorne, 1%10 ist 1 und so weiter und so fort. Das geht bei jeder beliebigen Zahl.
Jetzt noch implementieren, aber das sollte kein größeres Problem sein. ;-)
LG
Du willst die letzte Zahl anders behandeln. Was trifft denn zu, wenn answer nur noch einstellig ist? Schlichtweg answer < 10. Also setzt Du das Plus einfach nur, wenn answer >= 10 ist.
while (0 != answer){
int ziffer = answer % 10;
System.out.print(ziffer);
if(answer >= 10) System.out.print(" + ");
summe = summe + ziffer;
answer = answer/10;
}
if(answer > 0 && answer < 10000)
Das wäre dann mal die bedingung für 1.
Und für 2. dürfte die int to string methode was für dich sein. Dann kannst du deinen string zum array machen und so die einzelnen werte bearbeiten.
@Willibergi die bedingung war doch 0 < answer < 10000 ..? int kann doch nur ganze zahlen abspeichern.. was gibt es da gross zu prüfen?
if(answer > 0 && answer < 10000)
Es ist weder die Rede davon, dass die Zahl maximal vierstellig sein soll, noch überprüft diese Methode die Ganzzahligkeit. Bringt also nüschte.
okay zugegeben, meine methode ist nicht so elegant sondern eher "quick and dirty" :D
rückschliessend kannst du natürlich dann auch gleich die bestehende methode wegwerfen und mit der neuen kombinieren in dem du die aktuelle zahl wieder von string zu int konvertierst und damit rechnest. kannst aber selbstverständlich auch bei der aktuellen methode bleiben.
Alles klar habe es jetzt hiermit hinbekommen:
while (0 != answer){
int ziffer = answer % 10;
System.out.print(ziffer);
System.out.print(" + ");
summe = summe + ziffer;
answer = answer/10;
}
Nur wird jetzt ausgegeben: 5 + 4 + 3 + 2 + = 14
Wie bekomme ich es hin dass das letzte + wegfällt?