public class TTT1 {
public int test() {
int i;
for( i=0; /*i<5*/; i++) {
if(i == 3) {
return i;
}
}
}
public static void main(String[] args) {
System.out.println(new TTT1().test());
}
}
这样编译没问题 也能运行,但是把for循环的条件注释去掉以后就会出错。 for中的return是不是只有for中认识,为什么去掉for、的条件又会编译成功?
public int test() {
int i;
for( i=0; /*i<5*/; i++) {
if(i == 3) {
return i;
}
}
}
public static void main(String[] args) {
System.out.println(new TTT1().test());
}
}
这样编译没问题 也能运行,但是把for循环的条件注释去掉以后就会出错。 for中的return是不是只有for中认识,为什么去掉for、的条件又会编译成功?
解决方案 »
- 求助。。java连接数据库的问题。。
- 什么情况下会造成SocketTimeoutException,在线待
- 文件的创建、修改、删除哪种操作会消耗较多的资源
- rmi 多线程机制 望指点!!!
- 请问高手为什么用JAVA的HTTP递交给JAVAServelet的时候,中文变成乱码了,急教!!!!!!!
- 在Applet中是如何将Button或TextField定位到界面中,请指导
- 请高手解答---图形问题
- 给我指迷津,谢谢了,关于方法调用问题
- ################高分求解!!!!,关注有分!!!!
- Jbuilder 5.0中的调试,我设好了断点,为什么有时候断点上打个叉,有时候打个勾,代表什么?
- Singleton 是线程安全的吗?
- java技术交流
可以这样改就好了public class TTT1 {
public int test() {
int i;
for (i = 0; i<5 ; i++) {
if (i == 3) {
// return i;
break;
}
}
return i;
} public static void main(String[] args) {
System.out.println(new TTT1().test());
}
}
1. break或者return语句,跟上面一样
2. 本身i<5条件不满足的情况
在你的例子里面,其实return和i<5两种情况都可能跳出,而又是要求方法有返回值,那么在i<5的时候,你根本没有定义用什么返回值返回(虽然实际情况不可能出现,还是编译器不能那么只能确定在逻辑上不能出现,它只能从语法上分析到可能出现那样情况),所以编译不通过。
总结一下,是在有i<5与return都可能打断循环的时候,没有为两种情况都准备返回值(程序后面也没有return语句),导致有i<5的时候编译不过
for ( i = 0; ; i++) {
if (i == 3) {
return i;
}
}
这样写,for循环如果不执行return语句,就是个死循环,当for循环结束的时候,函数test一定会有返回值的.
for ( i = 0; i<5 ; i++) {
if (i == 3) {
return i;
}
}当for循环结束的时候,编译器判断函数test()可能不会有返回值。所以报错。我这样讲对不?
break是不是有点多余了……