就像标题所说,我做了一个小函数,从用户字符串1和0取出,输出应该是十进制数,但由于某种原因我得到了错误的答案,希望你能帮我找到问题
public class ToDecimal{
public static void main(String[] args){
String string = args[0];
int length = string.length();
int power = length - 1;
int decimal = 0;
while(length > 0){
if (string.charAt(length - 1) == '1'){
decimal = decimal + (int)(Math.pow(2, length - 1));
} else if (string.charAt(length - 1) == '0'){
} else {
System.out.println("Wrong string spelling...");
}
length--;
}
System.out.println(decimal);
}
}
答案 0 :(得分:6)
您正在以向后的顺序应用指数。也就是说,在第一个循环中,您查看最后一个字符,但应用最大的指数length - 1
,第一个字符获得指数0
。
使用power
作为指数而不是length - 1
,并在power
循环的末尾增加while
。
decimal = decimal + (int)(Math.pow(2, power));
和
length--;
power++;
}
答案 1 :(得分:0)
刚刚在开头反转了字符串,并添加了减少功率的条件。
public static void main(String[] args){
String string = new StringBuilder(args[0]).reverse().toString();
int length = string.length();
int power = length - 1;
int decimal = 0;
while(length > 0){
if (string.charAt(length - 1) == '1'){
decimal = decimal + (int)(Math.pow(2, length - 1));
} else if (string.charAt(length - 1) == '0'){
} else {
System.out.println("Wrong string spelling...");
}
power--;
length--;
}
System.out.println(decimal);
}
}
无反向
String string = args[0];
int length = string.length();
int power = length - 1;
int decimal = 0;
int i=0;
while(i<length){
if (string.charAt(i) == '1'){
decimal = decimal + (int)(Math.pow(2, length - i-1));
}
i++;
}
System.out.println(decimal);