我是一名新手程序员,试图编写一个程序,将输入的二进制数转换为十进制数。据我所知,数学和代码是正确的,并且没有返回编译错误,但是输出的数字不是正确的十进制数。我的代码如下:
String num;
double result = 0;
do {
Scanner in = new Scanner(System.in);
System.out.println("Please enter a binary number or enter 'quit' to quit: ");
num = in.nextLine();
int l = num.length();
if (num.indexOf("0")==-1 || num.indexOf("1")==-1 ){
System.out.println("You did not enter a binary number.");
}
for (int i = 0; i < l; i++)
{
result = result + (num.charAt(i) * Math.pow(2, (l - i)));
}
System.out.println("The resulting decimal number is: " +result);
} while (!num.equals("quit"));
if (num.equals("quit")){
System.out.println("You chose to exit the program.");
return;
}
您可以给予任何帮助,我将不胜感激。我尽量让我的问题尽可能清楚,但如果你有任何问题,我会尽力回答。我没有这么久。我需要的是让某人查看它,并希望找到我在某处发生的错误,谢谢。
答案 0 :(得分:2)
更改
result = result + (num.charAt(i) * Math.pow(2, (l - i)));
到
result = result + ((num.charAt(i) - '0') * Math.pow(2, i));
或更紧凑,
result += (num.charAt(i) - '0') * Math.pow(2, i);
请注意,字符'0'
与数字0
不同('1'
和1
相同); num.charAt(i)
返回的字符不是整数。
int a = '0';
int b = 0;
System.out.println(Math.pow(2, a));
System.out.println(Math.pow(2, b));
输出:
2.81474976710656E14
1.0
差异不大吗?
答案 1 :(得分:1)
函数String.charAt();
不会返回数字0或1,您可以将该数字与位相乘,但字符为“id”。您需要将String / char转换为数字。
String num;
double result = 0;
do {
Scanner in = new Scanner(System.in);
System.out.println("Please enter a binary number or enter 'quit' to quit: ");
num = in.nextLine();
int l = num.length();
if (num.indexOf("0")==-1 || num.indexOf("1")==-1 ){
System.out.println("You did not enter a binary number.");
}
for (int i = 0; i < l; i++)
{
result = result + (Integer.parseInt(num.substring(i,i+1)) * Math.pow(2, (l - i)));
}
System.out.println("The resulting decimal number is: " +result);
} while (!num.equals("quit"));
if (num.equals("quit")){
System.out.println("You chose to exit the program.");
return;
}
顺便说一句:为什么一个字符串不包含0或1而不是二进制数字?以1111
为例。我认为你应该更好地检查“既不是0也不是1”
if (num.indexOf("0")==-1 && num.indexOf("1")==-1 ){
System.out.println("You did not enter a binary number.");
}
答案 2 :(得分:0)
请注意,num.charAt(i)
为位置i
处的字符提供ASCII代码。这不是您想要的价值。在使用值进行任何数学运算之前,您需要将每个字符数字转换为int
。
答案 3 :(得分:0)
Integer.parseInt(string, base)
使用“base”基数将字符串解析为整数,如果无法转换,则会引发异常。
import java.util.Scanner;
public class Convertion {
public static void main(String[] args) {
String num;
Scanner in = new Scanner(System.in);
System.out.println("Please enter a binary number");
num = in.nextLine();
try{
//this does the conversion
System.out.println(Integer.parseInt(num, 2));
} catch (NumberFormatException e){
System.out.println("Number entered is not binary");
}
}
}