Nummer splitten

stringzz

Mitglied
Hi, meine Aufgabe ist folgender:

"In einer main-Methode wird die Zahl als int von der Konsole gelesen. Dann wird in einer Methode splitNumber die Zerlegung durchgeführt und das Ergebnis als String an main zurückgeliefert. Dort wird das Ergebnis dann ausgegeben. In splitNumber findet keine Ein- oder Ausgabe statt! Beim Zerlegen der Zahl soll nach jedem ausgegebenen Zeichen zur Trennung ein Komma eingefügt werden. Führende Nullen sind ebenso zu unterdrücken wie ein abschließendes Komma. Die Zahl 0 ist als positive Zahl zu behandeln. Beispiel: splitNumber(246) liefert “+,2,4,6” als Ergebnis."

Mein bisheriger Code:

Java:
public class NS {

    public static void main(String[] args) {

        println("Bitte geben Sie eine ganze Zahl ein");
        int ganzeZahl = readInt();

        println(splitNumber(ganzeZahl));
    }

    public static String splitNumber(int ganzeZahl) {

        int ziffer1 = ganzeZahl % 10;
        int ziffer2 = ganzeZahl % 100 / 10;
        int ziffer3 = ganzeZahl % 1000 / 100;
        int ziffer4 = ganzeZahl % 10000 / 1000;
        int ziffer5 = ganzeZahl % 100000 / 10000;
        int ziffer6 = ganzeZahl % 1000000 / 100000;
        int ziffer7 = ganzeZahl % 10000000 / 1000000;
        int ziffer8 = ganzeZahl % 100000000 / 10000000;
        int ziffer9 = ganzeZahl % 1000000000 / 100000000;
        int ziffer10 = ganzeZahl % 1000000000 / 1000000000;

        return "+" + "," + ziffer10 + " " + "," + ziffer9 + " " + "," + ziffer8 + " " + "," + ziffer7 + " " + ","
                + ziffer6 + " " + "," + ziffer5 + " " + "," + ziffer4 + " " + "," + ziffer3 + " " + "," + ziffer2 + " "
                + "," + ziffer1;

    }

}

Ich weiß, da fehlt noch einiges und so, aber bin absoluter Neuanfänger, daher bitte nicht so streng sein 😀
Wenn ich jetzt z.B. 246 eingebe, kommt das als Ergebnis raus: +,0 ,0 ,0 ,0 ,0 ,0 ,0 ,2 ,4 ,6

Meine Fragen:

1. Wie kann ich die führenden Nullen entfernen?

2. Und bei negativen Zahlen muss ich ja eig nur das "+" in ein "-" umwandeln, denke mal mit einer If-Anweisung?

3. Und das größte Problem ist bei großen Zahlen, also wenn es mehr als 10 Ziffern hat, da ich jetzt nicht bis ziffer50 oder ziffer100 schreiben will, welche Schleife sollte ich da am besten benutzen?

Leider kann ich noch keine krassen Konstrukte oder so verwenden, haben bisher nur 4 Arten von Schleifen, Methoden, Strings etc. durchgenommen.
Aber alleine ein Paar Denkanstöße würden mir viel weiterhelfen ^^
 
Hier mal ein Beispiel, wie man sich von hinten nach vorne durch so eine Zahl variabler Länge arbeiten kann:
Java:
public static void main(String[] args) {
    int zahl = 123456789;

    StringBuilder sb = new StringBuilder();
    while (zahl > 0) { //Über alle Ziffern iterieren
        int letzteZiffer = zahl % 10; // Letzte Ziffer ermitteln
        sb.insert(0, letzteZiffer); // Letzte Ziffer am Anfang einfügen
        zahl /= 10; // Letzte Ziffer entfernen
    }
    System.out.println(sb.toString());
}

Um führende Nullen brauchst du dich dann nicht mehr kümmern. Was fehlt sind die Kommas und das Vorzeichen, aber vielleicht reicht der Denkanstoß schon 😉
 
1. Wie kann ich die führenden Nullen entfernen?
Mit unterdrücken ist einfach nur gemeint, dass du darauf achten sollst in deiner Ausgabe kommt nicht +,0,1 vor. Genauso sollst du explizit darauf achten in deiner Ausgabe kommt nicht +,1, vor.

2. Und bei negativen Zahlen muss ich ja eig nur das "+" in ein "-" umwandeln, denke mal mit einer If-Anweisung?
Umwandeln nur je nach Implementierung. Aber If-Anweisung klingt schonmal nicht schlecht ;-) Es gibt aber auch mindestens eine Lösung wo du kein if brauchst.

3. Und das größte Problem ist bei großen Zahlen, also wenn es mehr als 10 Ziffern hat, da ich jetzt nicht bis ziffer50 oder ziffer100 schreiben will, welche Schleife sollte ich da am besten benutzen?


Hier mal eine Lösung, aber mit der bitte diese nicht zu verwenden, denn DecimalFormat und StringJoiner sind sicher nicht im Sinne des Aufgabenstellers. Soll nur als Anregung dienen.

Java:
import java.text.DecimalFormat;
import java.util.StringJoiner;
import java.util.Arrays;

public class MyClass {
    public static String splitNumber(int number) {
        DecimalFormat df = new DecimalFormat("+#;-#");
        String formatted = df.format(number);
        
        StringJoiner sj = new StringJoiner(",");
        
        for (int i = 0; i < formatted.length(); i++) {
            sj.add("" + formatted.charAt(i));
        }
        
        return sj.toString();
    }
    
    public static void main(String args[]) {
        System.out.println(splitNumber(0));
        System.out.println(splitNumber(123));
        System.out.println(splitNumber(+456));
        System.out.println(splitNumber(-789));
    }
}
 

Zurück
Oben