CodeGym /Kurse /Java Syntax /Aufgaben zur Objektlebensdauer

Aufgaben zur Objektlebensdauer

Java Syntax
Level 6 , Lektion 5
Verfügbar

„Hi, Amigo. Noch ein paar Aufgaben für dich:“

Kommentare (12)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
dp21haw Level 8, Hamburg, Germany
26 August 2024
Diese Lösung wird nicht akzeptiert, obwohl sie genau das gleiche macht..


public static int gerade = 0;
    public static int ungerade = 0;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String s = br.readLine();
        int i = 0;

        while(true){
            if(i >= s.length())break;
            if(Integer.parseInt(s.valueOf(i)) % 2 == 0) gerade++;
            else if(Integer.parseInt(s.valueOf(i)) % 2 != 0) ungerade++;
            i++;
        }

        System.out.println("Gerade: " + gerade + " Ungerade: " + ungerade);
    }
Deki Level 9, Munich, Germany
15 Dezember 2024
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.
Hariboto Level 7, Dresden, Germany
16 Februar 2023
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.
23 März 2021
finalize ist doch bereits seit etlichen Jahren als deprecated markiert. Gibt es noch einen triftigen Grund für die Vermittlung ? :D
Daniel Ritter Level 17, Augsburg, Deutschland
7 April 2021
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 :-)
Christof Level 16
7 Januar 2021
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.
Julia Level 18, Starnberg, Germany
30 Januar 2021
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.
Christof Level 16
31 Januar 2021
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.
Ch1psta Level 6
13 Juli 2022
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.
Edelmalz Level 4, Cologne, Germany
19 August 2022
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?
Fibs_1303 Level 10, Germany
21 Februar 2023
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.
16 August 2024
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".