java двоично-десятичный преобразователь - PullRequest
0 голосов
/ 13 марта 2020

Это одна из моих первых Java программ, и я очень озадачен, почему она не работает. Справка?

Кроме того, оператор else печатается несмотря на то, что 'input' получает правильное значение. Есть ли структура для условных операторов, которую я пропускаю?

package beginning;
import java.util.Scanner;
import java.lang.Math;

// VERY BROKEN

public class BinaryDecimalConverter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("Number Base To Convert: 1) Binary 2) Decimal ::");
        String binOrDec = sc.next();
        System.out.println("Enter Number ::");
        long number = sc.nextInt();
        double result = 0;

        if ((binOrDec.equals("1")) || (binOrDec.equals("Binary"))) {
            char[] bin = ("" + number).toCharArray(); // conversion must be String >> char[]
            int index = bin.length - 1;
            double aggregate = 0;
            for (int i = 0; i < bin.length; i++) {
                aggregate = ((Math.pow(2, i)) * (bin[index])); // when using Math.pow(a, b) - a must be 'double' data type
                index = index - 1;
                result = result + aggregate;
            }   
        }
        if (binOrDec.equals("2") || binOrDec.equals("Decimal")) {
            // decimal-binary converter, unfinished.
        }
        else {
            System.out.println("Invalid Input");
        }

        System.out.println("" + number + " >> " + result);
        sc.close();

    }

}

1 Ответ

0 голосов
/ 13 марта 2020

ваш код говорит: если binOrDec равно 2 или Decimal, ничего не делать, иначе выведите invalid input. Компьютеры делают то, что вы говорите им. Я думаю, что вы, вероятно, хотите, чтобы else перед этой строкой проверял 2 / десятичное число.

«не работает» - не лучшее начало. Помогите нам помочь вам:

  • Если он не скомпилируется, сообщите нам об ошибке, которую выдает компилятор, и убедитесь, что номера строк совпадают, иначе вы дадите нам возможность узнать, где искать.
  • Если он компилируется, но при его запуске вы получаете ошибку, укажите ошибку, а также все предоставленные вами данные, которые привели к ошибке.
  • Если он компилируется, и запустить, и вы получите вывод, но это не тот вывод, который вы ожидали, объясните, что вы набрали, чтобы получить его, что вы ожидали и почему.

Ваш массив bin имеет тип char[]. Например, если я задаю двоичное число 1010, оно содержит 4 символа: 1, 0, 1 и 0. Это символов . персонажи ascii. Символ ascii 1 имеет большое значение цифры c (не 1):

char c = '1';
System.out.println(1 * c);

Вышеуказанные отпечатки .... 49.

Итак: aggregate = ((Math.pow(2, i)) * (bin[index])); умножается на 48 или 49 в зависимости от того, является ли этот символ 1 или 0. Я думаю, вы можете искать if (bin[index] == '1') aggregate = Math.pow(2, i);.

...