1

以下是我的代码片段:

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();There are String variables forname因为它是我剪切的代码的一部分。请帮忙解答。谢谢。

4

4 回答 4

4

当您在 null 上调用时,它会在返回时抛出NPE 。您的 while 循环应如下所示:br.readLine()nulllength()

while((name= br.readLine())!=null){
        namelenx = name.length();

现在,即使bufferedReader在您的 while 上返回 nullreadLine()也会终止。

于 2013-01-28T16:17:06.590 回答
1

可能,你想改变

while(name != null)

while((name = br.readline()) != null)

通过这种方式,您正在检查 la 读取的内容brnull您可以确定nameis never null

于 2013-01-28T16:20:14.017 回答
0
name = br.readLine();

很可能返回 null。这是你所期望的吗?从doc,它返回:

包含行内容的字符串,不包括任何行终止字符,如果已到达流的末尾,则为 null

所以你很可能已经到了输入的结尾。

于 2013-01-28T16:16:53.473 回答
0

正确的方法是:

String name = null;

while((name = br.readLine()) != null) {
    ...
}
于 2013-01-28T16:18:36.463 回答