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]
 

KonradN

Super-Moderator
Mitarbeiter
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.
 

osion

Bekanntes 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]
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)
 

Jw456

Top Contributor
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');
       }
  }
 

Oneixee5

Top Contributor
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]
 

Neue Themen


Oben