NumberFormatException的

时间:2013-12-11 13:06:53

标签: java

我正在尝试将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)

4 个答案:

答案 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进行比较的部分也是不正确的,正如其他成员所指出的那样。

干杯