【问题标题】:Java Binary to Decimal Format/ How to assign a proper input?Java二进制到十进制格式/如何分配正确的输入?
【发布时间】:2018-09-01 14:58:21
【问题描述】:

我正在编写一个 java 程序来将二进制数转换为十进制数,我已经设法让我的程序在这方面工作。

我的问题是我该如何做才能让用户输入二进制数,否则会弹出错误并且问题会结束? 另外,如何重复我的语句,以便用户可以计算多个二进制数转换?

如果您给出答案,您能否解释每个步骤的工作原理并展示代码的外观?

我目前的程序是这样的:

public static void main(String[] args) {

    Scanner input = new Scanner( System.in );
    System.out.println("Enter a binary number: ");

    int binarynum =input.nextInt();
    int binary=binarynum;
    int decimal = 0;
    int power = 0;

    while(true){

        if(binary == 0){
            break;

        } else {

            int temp = binary%10;
            decimal += temp*Math.pow(2, power);
            binary = binary/10;
            power++;
        }
    }
    System.out.println("Binary = "+binarynum+" Decimal = "+decimal); ;
}

【问题讨论】:

  • String input; while (!(input = input.nextLine()).matches("[01]+")) System.out.println("Invalid binary number. Please try again: "); int binarynum = Integer.parseInt(input);
  • 请注意,您的方法适用于非常有限的一组值。它会在10000000000 上失败,因为它超出了int 范围。
  • 您应该将输入作为字符串获取,并将小数也生成为字符串。目前您只是将二进制重新计算为二进制。

标签: java binary decimal


【解决方案1】:

此版本不断要求用户提供二进制值。

如果不是二进制,就会抛出异常。

最后,要停止该过程,您只需输入END 作为输入。

public static void main(String[] args) {
    while (true) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a binary number (END to exit): ");
        try {
            String inputValue = input.next();
            if (inputValue.equals("END")) {
                break;
            }
            if (!inputValue.matches("[01]+")) {
                throw new Exception("Invalid binary input");
            }

            int binarynum = Integer.valueOf(inputValue);
            int decimal = getDecimalValue(binarynum);
            System.out.println("Binary = " + binarynum + " Decimal = " + decimal);
            System.out.println();
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    }
}

public static int getDecimalValue(int binary) {
    int decimal = 0;
    int power = 0;

    while (true) {
        if (binary == 0) {
            break;
        } else {
            int temp = binary % 10;
            decimal += temp * Math.pow(2, power);
            binary = binary / 10;
            power++;
        }
    }
    return decimal;
}

【讨论】:

  • 这个程序有效,但它最初缺少十进制值的返回语句。在while语句之后,应该是: ... }return decimal;
  • 我不知道您是否错过了最后一行代码,但返回小数确实存在。无论如何,我很高兴我的建议奏效了,你能把它标记为问题的答案吗?
【解决方案2】:

您可以使用基数为 2 的 Scanner.hasNextInt(int radix)Scanner.nextInt(int radix)。当然,nextInt(2) 可以完成所有工作,所以:

System.out.println("Enter a binary number:");
while (!input.hasNextInt(2)) {
    System.out.println("Only 0 and 1 allowed. Enter a binary number:");
    input.nextLine(); // Skip the input line.
}
int binarynum = input.nextInt(); // input.nextInt(2) would give the result.

扫描仪为其next...()方法有对应的测试方法hasNext...()

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2023-03-14
    • 2014-02-06
    • 1970-01-01
    • 2020-05-16
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多