二进制到十进制程序没有给出正确的答案java

时间:2014-09-11 20:44:26

标签: java binary decimal

所以我必须为家庭作业编写一个程序,它需要一个二进制数并打印出小数形式。我已经尝试了,而且我真的无法得到它。就像我打印出它每次在循环中所做的一样,当我将输入的数据乘以2 ^ i时,它看起来像得到了错误的值。如果有人可以提供帮助,那就太棒了

import java.util.Scanner;

public class Homework {

    public static void main(String[] args) {

        @SuppressWarnings("resource")
        Scanner userinput = new Scanner(System.in);

        System.out.println("Enter a binary number (only 1's or 0's): ");
        String binary_number = userinput.next();

        int value = 0;
        int square_value = 0; 

        for (int i = 0; i < binary_number.length(); i++) {


            char binary_place_holder = binary_number.charAt(i); 
            square_value = (int) Math.pow(2, i);

            if (binary_place_holder == '1') {
                value =  (square_value*binary_place_holder+value);
            }
            System.out.println(binary_place_holder+ "  " + square_value + "  " + value); 

        }
        System.out.print(binary_number + " == " + value);
    }
}

2 个答案:

答案 0 :(得分:1)

确定指数的方式是错误的:指数不是i

你需要意识到你从最高位开始从左到右看字符串。 这意味着第一个字符的指数为2^string_length-1。 第二个字符的指数是2^string_length-2,依此类推。 因此,当索引i变大时,即当我们从左向右扫描输入时,指数值变小。

所以指数是:

int exponent = binary_number.length() - 1 - i;

注意:你当然可以反向做事,从输入字符串的末尾开始,然后确定指数,我只想对代码进行少量更改。


此外,您应该添加一项检查以确保输入是有效的二进制数。您可以编写自己的函数来执行此操作,但更简单的解决方案是使用正则表达式匹配:

binary_number.matches("[01]+") 

如果字符串binary_number仅包含'0''1'字符,则返回true,否则返回false。


将所有这些更改应用于您的代码:

public static void main(String[] args) {
    @SuppressWarnings("resource")
    Scanner userinput = new Scanner(System.in);

    System.out.println("Enter a binary number (only 1's or 0's): ");
    String binary_number = userinput.next();

    if(!binary_number.matches("[01]+")) {
        System.err.println("\nPlease enter a valid binary number");
    } else {
        int value = 0;
        for (int i = 0; i < binary_number.length(); i++) {
            if (binary_number.charAt(i) == '1') {
                int exponent = binary_number.length() - 1 - i;
                value += (int) Math.pow(2, exponent);
            } 
        }
        System.out.print(binary_number + " == " + value);
    }
}

答案 1 :(得分:0)

这可能被视为作弊,但你可以像

一样
System.out.println(Integer.parseInt(binary_number, 2));