以下是我的代码中的代码段:
class Lines{
int nameMax() throws IOException{
// initialize variables
// These will be the largest number of characters in name
int namelen = 0;
//These will be the current word lenght.
int namelenx = 0;
...
while(name != null){
name = br.readLine();
namelenx = name.length();
...
if(namelenx > namelen) namelen = namelenx;
}
float nameleny = namelen/2; //Divides by 2 to find midpoint
namelen = Math.round(nameleny); //Value is rounded
return namelen;
}
}
我正在使用BlueJ,每当我尝试运行它时,它会在标题中给出错误并突出显示namelenx = name.length();
name
存在字符串变量,因为它是我剪切的代码的一部分出。请帮助解答。感谢。
答案 0 :(得分:4)
当br.readLine()
返回null
时,当您在null上调用length()
时,它会抛出 NPE 。
你的while循环应该如下所示:
while((name= br.readLine())!=null){
namelenx = name.length();
现在,即使bufferedReader
在readLine()
上返回null,您的时间也会终止。
答案 1 :(得分:1)
可能你想改变
while(name != null)
到
while((name = br.readline()) != null)
通过这种方式,您检查br
对null
的读取,并且您可以确定name
永远不会null
。
答案 2 :(得分:0)
name = br.readLine();
可能会返回null。这是你期望的吗?从the doc开始,它返回:
包含该行内容的String,不包括任何内容 行终止字符,如果流结束,则为null 达到
所以你可能已经到了输入的末尾。
答案 3 :(得分:0)
这样做的正确方法是:
String name = null;
while((name = br.readLine()) != null) {
...
}