2016-11-21 3 views
-1

der Titel ist verdeckte Bin in Dec, aber es geht falsch, wenn die Eingabe keine binäre.Ausnahme im Thread "Haupt" java.lang.NumberFormatException: Für die Eingabe String-Nummer

public class Bin2Dec { 
    public static void main(String[] args) { 
     String bin; 
     Scanner in = new Scanner(System.in); 
     System.out.println("enter a binary number: "); 
     bin = in.next(); 
     //BinLen = Bin.length(); 
     char n=bin.charAt(0); 
     if(n != 1 && n != 0){ 
      System.out.println("You did not enter a binary number."); 
     } 
     int decimalValue = Integer.parseInt(Bin, 2); 
     System.out.println("Bin= " + bin + " convert to Dec= " + decimalValue); 
     in.close(); 
    } 
} 
+1

Ja? Was hast du von 'parseInt()' erwartet, wenn die Eingabe nicht binär ist? – Andreas

+0

Richtig, welches Verhalten hast du * erwarten *? Du überprüfst gerade das erste Zeichen, aber das ist alles - und du prüfst das auch nicht richtig, da du gegen "1" und "0" statt gegen 1 und 0 nachsehen solltest gib auch nicht den Versuch auf, es zu konvertieren, nachdem du festgestellt hast, dass es falsch ist ...) –

Antwort

0

hier haben Sie einen funktionierenden Code:

String Bin; 
    Scanner in = new Scanner(System.in); 
    System.out.println("enter a binary number: "); 
    Bin = in.next(); 
    // BinLen = Bin.length(); 
    for (int i = 0; i < Bin.length(); i++) { 
     char n = Bin.charAt(i); 
     if (n != '1' && n != '0') { 
      System.out.println("You did not enter a binary number."); 
      System.exit(0); 
     } 
    } 

     int decimalValue = Integer.parseInt(Bin, 2); 
     System.out.println("Bin= " + Bin + " convert to Dec= " + decimalValue); 
     in.close(); 
} 

Sie den anderen Teil, wenn fehlen. und Sie nur überprüfen, ob das erste Zeichen 0 oder 1 ist und nicht die ganze Zeichenfolge

+1

Wahrscheinlich solltest du 'close()' außerhalb des 'else' lassen und das überflüssige'} 'fallen lassen. – Andreas

1

Dieser Teil des Codes ist Schuldige:

if(n != 1 && n != 0) { 
    System.out.println("You did not enter a binary number."); 
} 

int decimalValue = Integer.parseInt(Bin, 2); 

Wenn if Zustand false, dh Benutzer eingeben nicht Binärzahl , der Kontrollfluss erreicht Integer.parseInt(Bin, 2) nach dem Drucken der Nachricht.

und wie pro Java-Dokumentation:

Das erste Argument ist Null oder gleich Null ist eine Zeichenkette der Länge:

eine Ausnahme vom Typ Number wird tritt auf, wenn eine der folgenden Situationen ausgelöst.

Die Radix ist entweder kleiner als Character.MIN_RADIX oder größer als Character.MAX_RADIX.

Jedes Zeichen der Zeichenfolge ist keine Ziffer des angegebenen radix, mit der Ausnahme, dass das erste Zeichen ein Minuszeichen sein kann ‚-‘ (‚\ u002D‘) oder Pluszeichen ‚+‘ (‚\ u002B‘) vorausgesetzt, dass die Zeichenfolge länger als die Länge 1 ist.

Der von der Zeichenfolge dargestellte Wert ist kein Wert vom Typ int.

1

Sie könnten regulären Ausdruck verwenden;

if (! Bin.matches("[01]+")) { 
    System.out.println("You did not enter a binary number"); 
    System.exit(0); 
}else{ 
    int decimalValue = Integer.parseInt(Bin, 2); 
    System.out.println("Bin= " + Bin + " convert to Dec= " + decimalValue); 
    in.close(); 
} 
Verwandte Themen