subStrings zu int Array umwandeln?

justgame

Mitglied
a) Schreibt zunächst eine Methode, die überprüft, ob ein gegebenes Zeichen (char) eine Ziffer ist. boolean istZiffer(char c); Beispielaufruf: istZiffer(‘A‘); liefert false.


Aufgabe a habe ich wie folgt gelöst :

Java:
    public static boolean istZiffer(char c) {

        boolean antwort = true;

        if (Character.isDigit(c) == true) {
            return antwort;
        } else {
            antwort = false;
        }

        return antwort;

    }


Hier Blicke ich aber leider nicht mehr durch und bräcuhte eure Hilfe

b) Schreibt eine Methode, die eine Zeichenkette (String) als Eingabe erhält und ein Feld (Array) zurückgibt. Das Feld enthält positive, ganze Zahlen (int). Diese Zahlen werden gebildet aus den Substrings der übergebenen Zeichenkette. Hierbei werden nur diejenigen Substrings als Zahlen im Feld aufgenommen, die sich als positive, ganze Zahlen auffassen lassen. Die Substrings der Zeichenkette sind getrennt durch ein Komma gefolgt von einem Leerzeichen. Verwendet hierfür eure Implementierung aus Aufgabe 2. a). int[] subStrings(String str);
Beispielaufruf: subStrings(„-5, 20, abc, -20, defg, 45ab67, 23“); liefert {20,23}

mfg
 
Naja du solltst eine Methode
Java:
 int[] subStrings(String str);
schreiben, die einen String entgegen nimmt. Der String hat Subsequenzen, die mit ", " getrennt sind. Wenn ein Substring eine positive, ganze Zahl ist, dann soll diese mit in die Ausgabe.

Du kannst an dem Trennzeichen mittels String.split(...) ein array bauen, welches alle Substrings enthält. Dann musst du nur für jeden Substring prüfen, ob jedes Zeichen auch ein Digit ist (anführende und anstehende Leerzeichen kannst du mit .trim() entfernen) und diese, falls so, in einen Integer umwandeln und speichern.
 
Nachgucken ob es eine ganze Zahl ist, geht mit der .contains("."); Methode. Ist zwar unkonventienell aber das Beste und Einfachste, was mir eingefallen ist. 😀
 
Zuletzt bearbeitet:
Ich meinte, dass er erst nachprüft ob das überhaupt eine Zahl ist und dann guckt er nach, ob es eine ganze Zahl ist. Aber dein isDigit erschlägt das auch schon.

Da war ein ziehmlich krasser Lag in meiem Browser, dass die Nachricht erst so spät abgeschickt wurde. Meine Methode ginge auch aber die ist wohl zu kompliziert.

Ich habe aber noch etwas zu deiner Lösung für die erste Aufgabe. Ich bezweifle, dass dein Prof dir diese Aufgabe gegeben hat, damit du einfach eine API Methode nimmst. Ich denke, dass kommt besser, wenn du dir den Ascii Code davon geben lässt und dann nachguckst, ob das Zeichen laut Ascii eine Zahl ist. Den Ascii Code bekommst du mit charAt(int);
 
Das wäre meine Implementierung dazu.

Java:
    public class konverter {

    public static void main(String args[]) {

        ausgabe(subString("-5, 20, abc, -20, defg, 45ab67, 23"));
    }

 public static int[] subString(String str) {

        String string = new String();
        string = str;
        String[] array = string.split(", ");

        int[] ganzeZahlen;

        for (int i = 0; array.length; i++) {
            if (istZahl(array[i]) == true) {
                array[i] = ganzeZahlen[i];

            }

        }

        return ganzeZahlen;

    }

    public static void ausgabe(String[] ar) {

        System.out.println("Liste des Array: ");
        for (int i = 0; i < ar.length; i++) {
            System.out.println(ar[i]);
        }

    }

    static boolean istZahl(String s) {
        boolean antwort = true;
        char[] buchstaben = s.toCharArray();
        for (int i = 0; i < buchstaben.length; i++) {
            antwort = antwort && Character.isDigit(buchstaben[i]);
        }
        return antwort;
    }

Ich weiss nicht inwiefern meine Idee richtig ist
aber ich bekommen hier an der Stelle Fehler angezeigt.

Ich habe mir das so vorgestellt:

Aus meinem subStrings wird ein String[] array; erstellt.
Dann möchte ich in einer for-Schleife prüfe ob alle meine array-Inhalte aus Zahlen bestehen mit der istZahl(); Methode. Leider will es noch nicht funktionieren



Java:
for (int i = 0; array.length; i++) {
            if (istZahl(array[i]) == true) {
                array[i] = ganzeZahlen[i];
Ich habe malmeine Methode geprüft und tatsächlich es macht aus einem String mit subs einen String[] array. Also das funktioniert schonmal mit der split-Methode.
 
Zuletzt bearbeitet:
int[] ganzeZahlen;
Das hast du zwar deklariert, aber nicht initialisiert. Ergo ist das null. Du kannst hier natürlich noch nicht wissen, wie viele Zahlen in das Array müssen, aber du weißt, dass es maximal array .length sein können.
Wenn du Listen verwenden darfst, lässt sich das ganze elegant lösen, ansonsten musst du dir merken, wie zahlen du gefunden hast und später die Arraylänge anpassen (Array Einträge in ein neues Array kopieren)
 
Erstmal natürlich vielen Dank für eure Antworten (Y)
Ich habe meinen Beitrag vorher nochmal editiert gehabt villeicht wird meine Idee dadurch etwas deutlicher.

ArrayList dürfen wir nicht benutzen, da wir diese noch nicht hatten. Meine Methode muss aufjedenfall eine int[] mit allen ganzen Zahlen zurückgeben.

Da liegt ya auch schon das Problem. Ich weiss vorher ya nicht wie groß mein Array sein wird, das hängt ya ganz von den Substrings ab wie kann ich diese also initialisieren ?

Und hier an der Stelle :
habe ich den Fehler int cannot be converted to boolean

Java:
for (int i = 0; array.length; i++) {
            if (istZahl(array[i]) == true) {
                array[i] = ganzeZahlen[i];

            }

        }
 
Als erstmal am Rande: ausgabe() muss ein int[] engegen nehmen, kein String[].
Du kriegst da den Fehler, da du als Bedingung nur array.length stehen hast. Du wolltest sicherlich i < array.length schreiben.
 
Zuletzt bearbeitet:
Stimmt :idea:

Java:
    public static String[] subString(String str) {

        String string = new String();
        string = str;
        String[] array = string.split(", ");
        
        for( int i = 0; i < array.length; i++) {
            if ( istZahl(array[i]) == true)
                System.out.println(array[i]);
        }

        return array;

    }

gibt in der Konsole schonmal die richtigen Zahlen wieder 😀
Jetzt muss ich statt sysoutprint nur noch ein int[] array; zurückgeben können
 
Ich komme der Sache immer etwas näher:

Meine Methode sieht inzwischen so aus :

Java:
public static int[] subString(String str) {

        String string = new String();
        string = str;
        String[] array = string.split(", ");

        int[] ganzeZahlen = new int[array.length];

        for (int i = 0; i < array.length; i++) {
            if (istZahl(array[i]) == true) {
                ganzeZahlen[i] = Integer.parseInt(array[i]);

            }
        }

        return ganzeZahlen;

    }

Java:
public static void main(String args[]) {

        ausgabe(subString("-5, 20, abc, -20, defg, 45ab67, 23"));

    }

Das Problem hier natürlich ist, dass alle "nicht ganzen Zahlen" automatisch den Wert 0 zugewiesen bekommen und mit in den int[] array aufgenommen. Das wollte ich natürlich vermeiden. Das int[] array soll ya nur so lang sein wie es ganze Zahlen inden subStrings gibt... Hat jemand hierfür eine Lösung ?
 
Du kannst einmal drüberlaufen und alle ganzen Zahlen zählen, ein passend großes Array machen und dann noch mal drüberlaufen und dann alle ganzen Zahlen abspeichern.
 
Wie würde das im Code aussehen ?

Und 0 gehört doch auch zu den ganzen positiven Zahlen oder ? Das heisst es würde sich nichts in der Array-Länge ändern.
Außer ich sage: alle Zahlen >= 1;
dann hätte ich aber das Problem, dass wenn ich wirklich mal eine 0 im subString habe diese nicht mit aufgenommen wird oder ?
 
Das kannst du recht kompakt lösen:

Java:
 public static int[] subString(String str) {
 
        String string = new String();
        string = str;
        String[] array = string.split(", ");
 
        int[] ganzeZahlen = new int[array.length];
        int anzahlGanzerZahlen = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (istZahl(array[i]) == true) {
            	ganzeZahlen[i] = Integer.parseInt(array[i]); // zu integer umwandeln
            	anzahlGanzerZahlen++;
            }
        }
        
        int[] gekuerzteGanzeZahlenArray = new int[anzahlGanzerZahlen];
        
        for (int i = 0; i < anzahlGanzerZahlen; i++)
		{
        	gekuerzteGanzeZahlenArray[i] = ganzeZahlen[i];
		}
        
        return gekuerzteGanzeZahlenArray;
    }
 
Ja wenn man vergisst, den Index richtig zu setzen:
Java:
String string = new String();
        string = str;
        String[] array = string.split(", ");
 
        int[] ganzeZahlen = new int[array.length];
        int anzahlGanzerZahlen = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (istZahl(array[i]) == true) {
            	ganzeZahlen[anzahlGanzerZahlen] = Integer.parseInt(array[i]); // Darf natürlich nicht i sein, sondern anzahlGanzerZahlen
            	anzahlGanzerZahlen++;
            }
        }
        
        int[] gekuerzteGanzeZahlenArray = new int[anzahlGanzerZahlen];
        
        for (int i = 0; i < anzahlGanzerZahlen; i++)
		{
        	gekuerzteGanzeZahlenArray[i] = ganzeZahlen[i];
		}
        
        return gekuerzteGanzeZahlenArray ;

Oder etwas kompakter:
Java:
 public static int[] subString(String str) {
 
        String[] array = str.split(", ");
        int[] ganzeZahlen = new int[array.length];
        int anzahlGanzerZahlen = 0;
        
        for (int i = 0; i < array.length; i++) {
            if (istZahl(array[i])) {
            	ganzeZahlen[anzahlGanzerZahlen] = Integer.parseInt(array[i]);
            	anzahlGanzerZahlen++;
            }
        }
        
        return Arrays.copyOf(ganzeZahlen, anzahlGanzerZahlen);
    }
 
Zuletzt bearbeitet:
Klappt ! THX !

Jetzt mal aus neugiert, könnte man das einfacher implementieren 😀 ?

Und noch eine andere Frage lernt man als Programmierer die gesamte JAVA-Bibliothek auswendig oder woher weiss man das es eine Methode .split gibt die subStrings trennt und als Array zurückgibt ?
Ich meine ich wäre in 100 Jahren nicht auf diese Methode gestoßen.
UNd gibt es sowas wie eine in deutsch übersetzte Java Bibliothek zum nachschlagen ?
 
Galileo Computing :: Java ist auch eine Insel - index
Das offene Buch "Java ist auch nur eine Insel" enthält viele Materialen und ist ein gutes Nachschlagewerk.
Die Java Bibs lernt man, indem man immer wieder alte Dinge verwendet und neue Dinge nachschlagen muss (google ist dein Freund).
Das kann man sicherlich noch kürzer machen, zumal man dabei natürlich auch auf leserlichkeit verzichten kann. Wenn Java-Code leserlich ist, dann ist das oftmals mehr wert, als ihn kurz zu fassen.
 
Arrays ist eine Klasse aus einem anderen Package. Um genau zu sein ist es eine Helperklasse, die viele nützliche Funktionen für Arrays verschiedener Standardtypen bereitstellt.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben