# Binär in Dezimal



## xxNervoxx (19. Mrz 2022)

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]


----------



## Jw456 (19. Mrz 2022)

Dann prüfe doch ob das Zeichen (char)  auch eine 1 oder 0 ist und ignoriere alle anderen.
In der for Schleife.


----------



## KonradN (19. Mrz 2022)

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 (29. Mrz 2022)

xxNervoxx hat gesagt.:


> 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?
> 
> 
> ...


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 (29. Mrz 2022)

wie schon gesagt wurde überspringe das leer Zeichen in der for Schleife

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


----------



## Oneixee5 (29. Mrz 2022)

Was funktioniert denn nicht?

```
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]


----------



## Oneixee5 (29. Mrz 2022)

xxNervoxx hat gesagt.:


> Hallo, ich möchte eine binäre Zahl die als String eingelesen


Wenn du schon einen String hast, kannst du Leerzeichen auch anders loswerden:

```
System.out.println("1 1 1 1 0 1 1 1".replace(" ", ""));
```


----------

