所以我必须为家庭作业编写一个程序,它需要一个二进制数并打印出小数形式。我已经尝试了,而且我真的无法得到它。就像我打印出它每次在循环中所做的一样,当我将输入的数据乘以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);
}
}
答案 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));