我正在尝试将2的补码二进制数(在任何位中)转换为十进制,并且我已经给出了一个数字格式。我是java的新手。我努力寻找原因是什么,但我无法找到它。有没有人可以对我说这个代码博客有什么问题?
...
public static int decimal(String a){
if((a.charAt(0)) == '1'){
int length= a.length();
String sum="";
for (int i=0; i<=length; i++){
int b=0;
char result = a.charAt(b);
b++;
if(result == 0){
result=1;
}else{
result=0;
}
sum= sum + result;
}
int num= Integer.parseInt(sum, 2);
num= num+1;
num*= -1;
return num;
}else{
int decimalInt = Integer.parseInt(a, 2);
return decimalInt;
}
}
...
这是例外:
Exception in thread "main" java.lang.NumberFormatException: For input string: " "
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at BinaryToInstruction.decimal(BinaryToInstruction.java:193)
at BinaryToInstruction.main(BinaryToInstruction.java:83)
答案 0 :(得分:4)
问题在于:
if(result == 0){
result=1;
}else{
result=0;
}
结果是char
,而不是int
。虽然这个编译(因为char
可以处理0到65535之间的int值),我想你想做:
if(result == '0'){
result='1';
}else{
result='0';
}
请注意,您在>> 循环中初始化b
,因此您只需获取原始字符串中的第一个char
并每次都进行交换。请注意,使用StringBuilder
会更好。
StringBuilder sum= new StringBuilder();
for (int i=0; i< a.length(); i++){
char result = a.charAt(i);
if(result == '0'){
result='1';
}else{
result='0';
}
sum.append(result);
}
int num= Integer.parseInt(sum.toString(), 2);
答案 1 :(得分:0)
从堆栈跟踪中看起来好像只传递空格。这可能是你的问题。
答案 2 :(得分:0)
如果它不是大学课程,你应该使用内置
Integer.parseInt(String str, int radix)
答案 3 :(得分:0)
实际上你的代码在else部分抛出异常。由于传递的字符串由空格构成:
if((a.charAt(0)) == '1'){
失败,其他人参与其中。但是,因为它只尝试parseInt,所以它会给出错误。
你应该首先确定你的String是由白色空格组成的,并且对于这种方法,你可以使用某种保护,比如如果String是空的或者由空格组成,则在开头抛出异常。
将charAt(0)位置与0进行比较的部分也是不正确的,正如其他成员所指出的那样。
干杯