Java 无限循环问题

请问各位大神,这里小程序为何会无限循环呢?
public class TestException {
public static void main(String args[]) {
int i = 0;
String greetings[] = { " Hello world !", " Hello World !! ",
" HELLO WORLD !!!" };
while (i < 4) {
try {
// 特别注意循环控制变量i的设计,避免造成无限循环
System.out.println(greetings[i]);
i++;

} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界异常");
} finally {
System.out.println("--------------------------");
}
}
}
}

i=3的时候在 System.out.println(greetings[i]);这一行的时候就报错了,直接进入了catch里面所以i++;这行没有执行所以i一直等于3 你可以在catch里面吧i打印出来 。
所以 应该把i++放在finally里面
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-28
i=3时System.out.println(greetings[i]);
抛异常,被捕捉,后面的i++不执行,(即i永远没机会>=4)所以while循环无法结束追问

请问 为何改为这样
System.out.println(greetings[i++]);
就可以了呢?

System.out.println(greetings[i]); i++;
有什么区别呢?

追答

System.out.println(greetings[i++]); 的执行顺序:
1、i++
2、greetings[(i++执行后的返回值)]
所以i++会在数组越界异常抛出前执行

第2个回答  2015-07-28
当i=3的时候会出现数组越界,就到catch里面去了,i就不会++了。
第3个回答  2015-07-28
把catch和finally放到while外面

java 有时会无限循环 不知道问题出在哪
do{}while();这里有问题。当muhaha=true满足时,会无限循环do里面的代码。如果仅单次循环,直接用if即可。if(muhaha == true){ \/\/do里面的逻辑代码 }

请教一下 这个java程序 为什么会无限循环?(注:怎么改我知道,请告诉我为...
你输入A,那么c!='b'成立,你输入B,那么c!='a',输入其它的,那么两个都成立,所以无限

Java中用for循环打印1到10然后再到1依次无限循环的星号
一般无限循环可以使用while(true)但是也可以使用for(;;) 来实现无限循环 参考代码 public class ForDemo {public static void main(String[] args) {for (;;) {\/\/ 无限循环\/\/ 从1->10for (int i = 1; i <= 10; i++) {for (int j = i; j > 0; j--) {System.out.print("*...

java程序求助 while (true) i = 0; while (!false) i = 0 解释一下为...
while()是如果括号内为真,就会执行i=0,只有当括号内为false时,循环才会停止;因为第一个为true,且不会变为false,所以会一直循环下去。同理,第二个的!false也就是true的意思了,所以一样的也是无限循环。如果你想终止循环的话,可以使用if语句。这些你理解了就好,理解了对于以后的编程都有帮...

java怎样使用for语句无限循环?
Java中要使for语句无限循环,只需把循环的判定条件去掉即可。实现for语句无限循环的方法有很多,最常用的就是直接在条件中写两个分号,如下代码句所示:for(;;),这样就达到了无限循环的目的。其实开发中,最大忌讳就是使用无限循环,因为一旦控制不好就会出现死循环,如果在循环产生的对象较多,且又没...

我听说java中的死循环和无限循环是两回事 是吗
死循环一般是你直接无法推算出的循环条件,比如返回值永远不为ture,就陷入死循环,此时会吃内存,知道内存吃完,然后死机,没什么实际作用 无限循环主要是用来重复做一件事,什么时候控制自己决定,例如while(true){...}这个代码块的就是无限被执行的代码,比如使用网略协议从服务器端获取数据,建立连接后,不停...

Java程序进入死循环后删除程序可以解决死循环嘛?
删除程序并不能解决 Java 程序进入死循环的问题。死循环是指程序执行无法结束的循环。在 Java 中,死循环常常是由于程序中的语法错误或逻辑错误导致的。例如,如果程序中有一个无限循环,但是没有条件可以退出循环,那么程序就会进入死循环。解决死循环的方法有很多种,但是删除程序并不是其中之一。一般来...

java中的输入输出流,为什么删除 s = in.readLine(); 时输入的字符无限循...
将抛出IOException异常 while (s != null) { System.out.println("Read: " + s);--s = in.readLine();} 你是把循环体内的 s = in.readLine(); 去掉了吗?那当循环前读入的数据后, s一直有值啊, 判断条件一直成立 while (s != null)所以 无限循环输出 了 ...

java类如果引用了自身,是个什么情况,怎么感觉像是无限循环啊
如果引用的是自身,那个自身其实不是自己,而是引用了另外一个新的对象。可能是别的类传过来的,也可能是自己New出来,只要是New出来的,就是一个新的类,不是自己了,不会有无限循环的。除非你自己在构造方法里又New了一次这个类。

java thread while(true)什么意思
也就是说当程序执行到 while(true){ } 时循环条件永远为真,也就是所说的无限循环。这样用时必须在循环体重定义退出循环的语句,否则程序将陷入死循环!!

相似回答