Was kann ich hier am besten machen (Java Problem)?

1 Antwort

Du scheinst das Problem ja selbst gelöst zu haben. Ich kann in deinem Code auch keinen offensichtlichen Fehler feststellen. Was sein kann, ist dass das Programm ein Problem damit hast, wenn du zwei Scanner für dieselbe Konsole offen hast.

Du musst auch nicht an jede Variabe eine 2 dranhängen, sondern kannst einfach die Variablen nochmal benutzen

Was ich dir auch noch dringend raten würde: Wenn du irgendwelche komplizierten Dinge mehrmals brauchst, erstelle eine Funktion dafür. In deinem Beispiel kannst du z.B. eine Funktion bauen, die Strings mit Binärzahlen in ints umwandeln kann, dann musst du nicht so sehr mit unterschiedlichen Variablennamen jonglieren.

import java.util.Scanner;


public class NumberConverter {
    public static void main(String[] args) {
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("Erste Zahl im Binärsystem?");
            int zahl1 = parseBinary(scanner.nextLine());

            System.out.println("Zweite Zahl im Binärsystem?");
            int zahl2 = parseBinary(scanner.nextLine());

            System.out.printf("%d + %d = %d (%s)%n", zahl1, zahl2, zahl1 + zahl2, Integer.toString(zahl1 + zahl2, 2));
        }
    }

    private static int parseBinary(String binaryString) {
        int decimal = 0;
        int power = 0;
        for (int i = binaryString.length() - 1; i >= 0; i--) {
            int digit = binaryString.charAt(i) - '0';
                decimal += digit * Math.pow(2, power);
                power++;
        }
        return decimal;
    }
}

Ich gehe mal davon aus, dass das eine Übung sein soll, womit du lernst, wie du zwischen verschiedenen Zahlensystemen hin und her rechnen kannst. Wenn du einfach nur eine Binärzahl einlesen willst, kannst du auch das hier benutzen:

int zahl = Integer.parseInt(scanner.nextLine(), 2);

Oder die umgedrehte Variante, wenn du ein int als Binärzahl ausgeben willst:

System.out.println(Integer.toString(zahl, 2));

Deine Funktion prüft auch nicht, ob der Benutzer irgendwas anderes, als 0 oder 1 eingibt. Kann gut sein, dass bei deiner Eingabe noch ein Leerzeichen, Komma, Punkt oder Zeilenumbruch mit in die Rechnung eingeflossen ist.

Außerdem ist deine Berechnung ganz schön rechenlastig. Java hat Operatoren, mit denen man die Bits in einer Zahl einfach nach links oder rechts schieben kann. Du brauchst also einfach nur für jedes Zeichen, was der Nutzer eingibt, die Bits eine Stelle nach links schieben und dann eine 1 oder 0 einfügen:

    private static int parseBinary2(String binaryString) {
        int result = 0;
        for (char n: binaryString.toCharArray()) {
            // Alle Bits des bisherigen Ergebnisses eine Stelle nach links schubsen
            result <<= 1; 

            // Wenn die aktuelle Ziffer eine 1 ist, 1 addieren
            result += n == '1'? 1: 0;
        }
        return result;
    }

Oder kurz und knackig als Stream:

    private static int parseBinary3(String binaryString) {
        return binaryString
            .chars()
            .reduce(0, (result, n) -> (result << 1) + (n == '1'? 1: 0));
    }