Binär in Dezimal

xxNervoxx

Neues Mitglied
Hallo, ich möchte eine binäre Zahl die als String eingelesen wird in dezimale umwandeln. Hier meine Q.Code.
Das klappt auch, nur wird die Binärzahl mit Leerzeichen eingeben, also 1 1 1 1 0 1 1 1. Und dann funktioniert es halt nicht mehr. Und ich weiß nicht warum. Könnt ihr mir helfen?


[CODE lang="java" title="Code:"]
import java.util.Scanner;

public class Umrechnung {

public static void main(String[] args) {


System.out.print("Ziffern: ");
Scanner scanner = new Scanner(System.in);
String Zahlen = scanner.nextLine();
char[] ziffer = Zahlen.toCharArray();
int zahl = 0;

for (char a: ziffer) {
zahl = 2 * zahl + (a - '0');
}

System.out.println(zahl);

scanner.close();
}

}[/CODE]
 
Lass mich einfach eine Gegenfrage formulieren: Wie kommst Du auf die Idee, dass es funktionieren könnte, wenn Du auch Leerzeichen verarbeitest?

Ein Leerzeichen hat ja auch einen Wert (32), so dass D dann ja entsprechend 32-48 = -16 bei der Berechnung an jedem Leerzeichen verrechnest.

Die Berechnung kann natürlich nur 0er und 1er verarbeiten und entsprechend musst Du den Code dann anpassen.
 
Hallo, ich möchte eine binäre Zahl die als String eingelesen wird in dezimale umwandeln. Hier meine Q.Code.
Das klappt auch, nur wird die Binärzahl mit Leerzeichen eingeben, also 1 1 1 1 0 1 1 1. Und dann funktioniert es halt nicht mehr. Und ich weiß nicht warum. Könnt ihr mir helfen?


[CODE lang="java" title="Code:"]
import java.util.Scanner;

public class Umrechnung {

public static void main(String[] args) {


System.out.print("Ziffern: ");
Scanner scanner = new Scanner(System.in);
String Zahlen = scanner.nextLine();
char[] ziffer = Zahlen.toCharArray();
int zahl = 0;

for (char a: ziffer) {
zahl = 2 * zahl + (a - '0');
}

System.out.println(zahl);

scanner.close();
}

}[/CODE]
Ein Leerzeichen sagt schon, dass es ein Zeichen ist und das Programm kann nur ein Leerzeichen erkennen, wenn Daten für ein Leerzeichen vorhanden sind.

Beispiel:
1 0 1 (String) => 49 32 48 32 49 (ASCII)
 
wie schon gesagt wurde überspringe das leer Zeichen in der for Schleife
Java:
 for (char a: ziffer) {
      if(a=='0' || a=='1') {
          zahl = 2 * zahl + (a - '0');
       }
  }
 
Was funktioniert denn nicht?
Java:
        final int num = 247;
        System.out.println(num);

        final String binaryString = Integer.toBinaryString(num);
        System.out.println(binaryString);


        final char[] ziffer = new char[binaryString.length() * 2];
        Arrays.fill(ziffer, ' ');
        for (int i = 0; i < binaryString.length(); i++) {
            ziffer[i*2] = binaryString.charAt(i);
        }
        System.out.println(new String(ziffer));

        int zahl = 0;
        for (final char a : ziffer) {
            if (a == '0' || a == '1') {
                zahl = 2 * zahl + a - '0';
            }
        }
        System.out.println(zahl);
[CODE title="Ausgabe"]247
11110111
1 1 1 1 0 1 1 1
247[/CODE]
 

Zurück
Oben