Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java while循环中的死代码警告,带有2个if';s_Java_Dead Code - Fatal编程技术网

Java while循环中的死代码警告,带有2个if';s

Java while循环中的死代码警告,带有2个if';s,java,dead-code,Java,Dead Code,我不明白为什么Eclipse会在第二个if条件下给我一个死代码警告: boolean frameErreicht = false; while (!frameErreicht) { String line = reader.readLine(); if (line.matches("@\\d*")) { reader.mark(reader.getLineNumber() - 1); reader.setLin

我不明白为什么Eclipse会在第二个if条件下给我一个死代码警告:

 boolean frameErreicht = false;
  while (!frameErreicht) {
        String line = reader.readLine();
        if (line.matches("@\\d*")) {
            reader.mark(reader.getLineNumber() - 1);
            reader.setLineNumber(reader.getLineNumber() - 1);
            frameErreicht = true;
        }
        if (line == null)
            throw new IOException("Keine Angaben zu Frames im Eingabestrom");
    }
LinenumberReader的readLine()方法的jdoc表示,如果到达流的末尾,它将返回
null
,因此如果在整个文本中都找不到匹配项(
line==null
),它应该抛出异常。

但有什么问题吗?

如果line为null,
line.matches(@\\d*”
会抛出一个NullPointerException

它已经死了,因为您之前取消了第4行中指针“line”的引用,这保证了它不是null,否则您将得到NullPointerException。

首先:

boolean found = false;
String line = null;
while ((line=reader.readLine())!=null) {
    if (line.matches("@\\d*")) {
        reader.mark(reader.getLineNumber() - 1);
        reader.setLineNumber(reader.getLineNumber() - 1);
        found=true;
        break;
    }
}
if(!found) throw new IOException("Keine Angaben zu Frames im Eingabestrom");
你不是在每一行都做这个检查


此代码不应返回任何死代码…

是因为您正在检查line.matches吗?当它到达下一行时不能为null,因为该访问将导致抛出?在调用matches之前,将空检查进一步上移。换句话说,您从未运行过它?为什么在运行前询问?@mellamokbtheWise同样的事情:)如果你认为现有答案是好的,请投票支持它,而不是发布重复的答案。为什么你要删除OP抛出
IOException
?解决方案是只交换if。