Dein Code geht nicht, weil du s.valueOf(i) verwendest, was nicht den Index der Ziffer liefert. Stattdessen solltest du s.charAt(i) nutzen, um das Zeichen an der Position i zu bekommen, und es mit Character.getNumericValue() in eine Zahl umwandeln.
Katze- und Hund-Objekte: je 50.000 -->
Mein Rechner schafft es mit 50.000 tatsächlich ohne ein Objekt zu zerstören. Bei 500.000 geht es aber nicht mehr.
Ja, die Methode ist als deprecated markiert... Es wird auch empfohlen, Klassen anzupassen, die diese Methode überschreiben. Dennoch war es langjähriger Bestandteil von Java und hilft evtl dabei, dem ein oder anderen den Lebenszyklus eines Objekts besser zu erklären.
CodeGym sollte an dieser Stelle nen entsprechenden Hinweis einbauen und evtl auf Alternativen verweisen :-)
Hallo, kann mir jemand den Code zu den geraden und ungeraden Ziffern erklären. An welcher Stelle im Code stelle ich fest, wieviel Zahlen gerade und ungerade sind und wo werden die Angaben in die Variablen "gerade" und "ungerade" geschrieben? Ich verstehe das nicht so ganz :)
Vielen Dank.
Wenn man mit einer beliebigen Zahl "Modulo 2" rechnet und als Ergebnis 0 herauskommt, dann ist diese Zahl gerade. Bleibt ein Rest ( also 1 ) dann ist die Zahl ungerade. Im if/else Konstrukt werden die Variablen Gerade und Ungerade jeweils hochgezählt.
Hallo,
danke für die Antwort. Das mit dem Modul hatte ich verstanden, aber ich eben erst das mit dem count / 10 verstanden. Ich dachte, es wird jede einzelne Zahl von 4445 untersucht, aber es wird ja immer die ganze Zahl untersucht und diese dann durch 10 geteilt und dann nochmal untersucht. Danke für die Antwort.
Also ich hatte da gerade auch so meine Schwierigkeiten vor allem wegen "/=10" (das Zeichen habe ich noch immer nicht ganz verstanden). Aber im Endeffekt verschiebt man das Komme eins nach links und als Integer gelten nur ganz Zahlen somit findet dann einfach die Prüfung der nächsten Zahl statt. Hoffe ich habe das so einigermaßen richtig verstanden. Wäre ich aber nie drauf gekommen.
Sorry aber ich verstehe die Aufgabenstellung so, dass eine eingelesene Zahl in einzelne Ziffern gesplittet werden soll und diese Ziffern untersucht werden sollen ob sie gerade oder ungerade sind. Aber aus meiner Sicht macht die Lösung mit /=10 etwas völlig anderes. Oder verstehe ich die Aufgabenstellung nicht richtig?
Ob eine Zahl gerade oder ungerade ist, ist immer von ihrer letzten Stelle abhängig.
Beispiel : 4245 ► 5 % 2 = 1 oder 4244 ► 4% 2 = 0 gerade .
Somit kann man mit Teilen durch 10 die Zahl immer kleiner werden lassen.
Final Beispiel :
3667 ► 7 % 2 = 1 ; ungerade = 1, gerade = 0
3667 / 10 = 366,7 ► 366 als Int ► 6 % 2 = 0 ; ungerade = 1, gerade = 1
366 / 10 = 36,6 ► 36 als Int ► 6 % 2 = 0; ungerade = 1 , gerade = 2
36 / 10 = 3,6 ► 3 als Int ► % 2 = 1 ; ungerade = 2 , gerade = 2
Fertig. Die Zahl 3667 besitzt 2 ungerade Zahlen und 2 gerade Zahlen.
Für alle, die Hilfe bei der Aufgabe brauchen: Hier ist eine etwas andere Lösung:
import java.io.*;
import java.util.Scanner;
/*
Gerade und ungerade Ziffern
*/
public class Solution {
public static int gerade;
public static int ungerade;
public static void main(String[] args) throws IOException {
//schreib hier deinen Code
Scanner s = new Scanner(System.in);
int zahl = s.nextInt();
String zahlAlsText = Integer.toString(zahl);
for (int i=0;i<zahlAlsText.length();i++){
if (Integer.parseInt(zahlAlsText.substring(i,i+1))%2 == 0){
gerade++;
} else ungerade++;
}
System.out.println("Gerade: " + gerade + " " + "Ungerade: " + ungerade);
}
}
Idee dahinter: Mit Integer.toString(zahl) wandle ich den int Wert in einen String um. Dann nehme ich anhand der for Schleife Ziffer für Ziffer aus dem soeben erstellten String heraus, wandle die einzelne Ziffer zurück in einen int mit Integer.parseInt um und prüfen durch den Modulo Operator, ob die Ziffer gerade oder ungerade ist.
Man erhält die einzelnen Ziffern über die substring Methode. Die Parameter i und i+1 sind Anfangs- und Endwert. Wichtig dabei zu wissen ist, dass man bei 0 anfängt zu zählen und, dass der Endwert exklusiv ist (also nicht zum geforderten String gehört). Bsp. String name = "tim"; name.substring(0,1) wäre dann nur das "t".
GO TO FULL VERSION