为何会报空指针异常?

时间:2022-06-30 20:35:12
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test7 {
public static void main(String[] args){
BufferedReader bufr =
new BufferedReader(new InputStreamReader(System.in));
String line =null;
try {
while((line=bufr.readLine())!=null){
char[] buf =line.toCharArray();
for(int i=0;i<line.length();i++){
if(!Character.isDigit(buf[i])){
System.out.println("输入的不是数字!");
break;
}
}
int i=Integer.parseInt(line);
if(i>Integer.MAX_VALUE)
System.out.println("输入的数字太大");
else
toBin(i);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void toBin(int num){
StringBuffer sb =new StringBuffer();
while(num>0){
sb.append(num%2);
num =num/2;
}
System.out.println(sb.reverse());
}

}

6 个解决方案

#1


不是空指针异常  是java.lang.NumberFormatException

#2


错误发出来看看是哪行的

#3


空指针没找到,NumberFormatException倒是肯定有

#4


int i=Integer.parseInt(line);

话说你的line可能包含字母,然后转int时出错

#5


while((line=bufr.readLine())!=null){
                char[] buf =line.toCharArray();
                for(int i=0;i<line.length();i++){
                    if(!Character.isDigit(buf[i])){
                        System.out.println("输入的不是数字!");
                        break;
                    }
                }
                int i=Integer.parseInt(line);
                if(i>Integer.MAX_VALUE)
                    System.out.println("输入的数字太大");
                else
                    toBin(i);
            }

break只是跳出for循环,假如你输入的不是数字,还是照样走int i=Integer.parseInt(line);
,报数字格式转换错误。

#6


你下面这两行,逻辑有点问题啊。
int i=Integer.parseInt(line);
if(i>Integer.MAX_VALUE)
你能正常转换的话,不可能满足你的判断条件啊,一定小于Integer.MAX_VALUE的啊,呵呵

#1


不是空指针异常  是java.lang.NumberFormatException

#2


错误发出来看看是哪行的

#3


空指针没找到,NumberFormatException倒是肯定有

#4


int i=Integer.parseInt(line);

话说你的line可能包含字母,然后转int时出错

#5


while((line=bufr.readLine())!=null){
                char[] buf =line.toCharArray();
                for(int i=0;i<line.length();i++){
                    if(!Character.isDigit(buf[i])){
                        System.out.println("输入的不是数字!");
                        break;
                    }
                }
                int i=Integer.parseInt(line);
                if(i>Integer.MAX_VALUE)
                    System.out.println("输入的数字太大");
                else
                    toBin(i);
            }

break只是跳出for循环,假如你输入的不是数字,还是照样走int i=Integer.parseInt(line);
,报数字格式转换错误。

#6


你下面这两行,逻辑有点问题啊。
int i=Integer.parseInt(line);
if(i>Integer.MAX_VALUE)
你能正常转换的话,不可能满足你的判断条件啊,一定小于Integer.MAX_VALUE的啊,呵呵