Prüfen, ob ein String eine Binärzahl ist

districon

Bekanntes Mitglied
Hallo,
ich will überprüfen ob im String s Binärzahlen enthalten sind. Sollte eine Binärzahl enthalten sein, so soll "Richtig" zurückgegeben werden. Für diese Aufgabe habe ich sogar schon zwei Ansätze. Einmal jedes Element des Strings auslesen (mittels for-Schleife) und schauen ob der Wert 1 oder 0 ist. Meine andere Idee war es die Summe des Strings zu ermitteln. Diese muss ja entweder gleich der Länge des Strings sein (wenn die Binärzahl nur aus 1en besteht) oder kleiner als die Länge. Ich denke aber für mein Problem ist die erste Variante wohl besser. Ich weiß nur noch nicht wie ich das jetzt genau umsetzen soll.
Wichtig zu sagen ist noch, dass ich nur String.length() und String.charAt() verwenden will.
Ich benötige auf jeden Fall eine If Anweisung. Aber soll dann in der if-Bedingung meine for-Schleife stehen? Oder wie mache ich das genau?
Danke für jede Hilfe,
Gruß
 

districon

Bekanntes Mitglied
Java:
public class Bin2Long {
    public static int checkInput(String s) {
        if (s == null) {
            return -3;
        } if (s.length() == 0) {
            return -2;
        }
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == 0 || s.charAt(i) == 1) {
                    return -1;
                } else if (s.charAt(i) != 0 || s.charAt(i) != 1) {
                    return i;
                }
            }



    }
}

Nun habe ich es doch fast selber herausgefunden. Es kommt aber noch die Fehlermeldung missing return statement. Was muss ich denn jetzt ändern? Statt "Richtig" habe ich jetzt -1 herausgegeben
 
Java:
    public static int checkInput(String s) {
        Matcher m = Pattern.compile("[01]+").matcher(s);
        if (m.find()) {
            return Integer.parseInt(m.group(), 2);
        } else {
            return -1;
        }
    }

    public static void main(String[] args) {
        System.out.println(checkInput("hallo100hallo"));
    }
 

districon

Bekanntes Mitglied
Sobald eine 0 oder eine 1 vorkommt, ist eine Binärzahl enthalten. Wenn der String nur aus 0en und 1en besteht, stellt die Zeichenkette eine Binärzahl dar. Jetzt ist halt nur die Frage, was genau Du brauchst und dann sollte die Umsetzung nicht allzu schwer sein :)
Hey, erstmal danke für die Antwort. Ich selbst habe nochmal eine Antwort mit meinem bisherigen Code verfasst. Das müsste jetzt so stimmen, nur habe ich ein klein wenig Probleme mit den return Anweisungen
 

Corvin697

Mitglied
Java:
public class Bin2Long {
    public static int checkInput(String s) {
        if (s == null) {
            return -3;
        } if (s.length() == 0) {
            return -2;
        }
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == 0 || s.charAt(i) == 1) {
                    return -1;
                } else if (s.charAt(i) != 0 || s.charAt(i) != 1) {
                    return i;
                }
            }



    }
}

Nun habe ich es doch fast selber herausgefunden. Es kommt aber noch die Fehlermeldung missing return statement. Was muss ich denn jetzt ändern? Statt "Richtig" habe ich jetzt -1 herausgegeben
Dir fehlt noch ein return Statement vor der vorletzten } (die Klammer, die die Methode schließt. Du fragst in deiner Methode nämlich mehrere Bedingungen mit den if-statements ab, sagst aber nicht, was passieren soll, wenn keines der Statements greift, und das geht nicht.
 

Robert Zenz

Top Contributor
So als Notiz, du hast hier ein Problem was das Design deiner Methode angeht. Wenn ein Fehler auftritt, retournierst du "-3", "-2" und "-1" um den Fehler anzuzeigen, aber diese drei Werte sind gueltige Werte welche auftreten koennten beim Input. Geraten "10000000 00000000 00000000 0000001" (oder war's "11111111 11111111 11111111 11111110"?) sollte "-1" ergeben. Damit kannst du beim Aufruf nicht mehr unterscheiden ob es ein gueltiger Wert war oder ein Fehler. Besser waere es damit wenn du hier zum einen eine "IllegalArgumentException" wirfst wenn der Parameter "null" oder leer war, und zum anderen eine "NumberFormatException" wenn Zeichen enthalten sind welche nicht passen (macht "Integer.parseInt" bereits).

Auszerdem passen deine Namen nicht. "Bin2Long" konvertiert zu "int", "checkInput" prueft nicht nur sondern konvertiert. Benennen von Dingen ist schwierig, aber sehr wichtig wenn sich im Code jemals wieder zu recht finden will.
 

mihe7

Top Contributor
Das müsste jetzt so stimmen, nur habe ich ein klein wenig Probleme mit den return Anweisungen
Geh mal Deine Schleife durch: Du prüfst das erste Zeichen (i==0), wenn dieses erste Zeichen den Codepoint 0 oder 1 hat, gibst Du sofort -1 zurück. Mal abgesehen davon, dass Du nach dem ersten Zeichen sofort aufhörst, prüfst Du Codepoints und keine Zeichen ab. Für Zeichen musst Du mit '0' und '1' (und nicht mit 0 und 1) vergleichen. Im else-Zweig prüfst Du eine Bedingung, die immer wahr ist, denn jedes Zeichen ist entweder von 0 oder von 1 verschieden.

Ich würde sagen: da stimmt eigentlich nix :)
 

Neue Themen


Oben