尝试编译“while”语句时的“unreachable statement”
Posted
技术标签:
【中文标题】尝试编译“while”语句时的“unreachable statement”【英文标题】:"unreachable statement" when trying to compile a "while" statement 【发布时间】:2012-11-18 05:50:25 【问题描述】:我是 Java 新手,正在完成一些课程作业。但是,在下面的代码中,我在尝试编译时收到错误“Unreachable statement”。关于我做错了什么的任何指示?
public String getDeliveredList()
int count = 0;
while (count < deliveredList.size())
return ("Order # " + count + deliveredList.get(count).getAsString());
count++;
【问题讨论】:
退货声明后不能有声明。它永远不会被执行,因为它无法访问(你的代码已经从方法返回了执行) 【参考方案1】:从函数返回后,从逻辑上讲,在此之后它不能再执行任何操作——永远不会到达count++
语句。
while (count < deliveredList.size())
// function always ends and returns value here
return ("Order # " + count + deliveredList.get(count).getAsString());
// this will never get run
count++;
【讨论】:
是的,并且该例程将最多执行一次(部分)迭代。if (count < deliveredList.size())
也可以。
dbaseman 是对的。你应该在 return 语句之前尝试count++;
,如果这仍然适用于你正在尝试做的事情。【参考方案2】:
如果你从一个函数返回,那么在函数返回点之后的任何语句基本上都是无法访问的语句,编译器会在这些语句上发出错误。
但是,尽管在 return 之后编写了语句,但以下代码不会发出错误
void max(int a,int b)
if(a>b)
System.out.println(a+" is greater");
return;
System.out.println(b+" is greater");
return;
这是因为第一个 return 语句是在嵌套范围内编写的,并且在函数范围内不会立即可见。当 a>b 时,程序执行只会通过第一个 return 语句。如果不是这样,则永远不会执行该代码块。因此,尽管返回后有语句,但代码是可编译的;
【讨论】:
以上是关于尝试编译“while”语句时的“unreachable statement”的主要内容,如果未能解决你的问题,请参考以下文章
自己动手写编译器:while,for,do等循环语句的中间代码生成
自己动手写编译器:while,for,do等循环语句的中间代码生成