0
点赞
收藏
分享

微信扫一扫

while(true) ... break 的应用

hwwjian 2023-05-15 阅读 101


 
while(true) ... break 的应用
 
在程序中,常常有一些无限循环的情况,比如当一个程序没有异常发生的时候,让循环一直执行。比如要计算PI的值,当发生异常的时候终止循环,这时候就需要while(true) ... break 着种结构。这不是新语法,也不算新用法。算得上一种不常见的能解决特殊问题的用法。
 
下面举例说明,比如要获取控制台输入字符串,然后将获取的字符串打印出来。可以这么写:

import java.io.IOException; /** 
* while(true) ... break 的应用 
* 
* @author leizhimin,2008-10-14 9:05:31 
*/ 
public class ConsoleInput { 
        public static void main(String[] args) { 
                int ch; 
                StringBuffer sb = new StringBuffer(); 
                System.out.print("请您输入一字符串:"); 
                while (true) { 
                        try { 
                                ch = System.in.read(); 
                                if (ch == -1 || (char) ch == '\n') { 
                                        break; 
                                } else if ((char) ch != '\r') { 
                                        sb.append((char) ch); 
                                } 
                        } catch (IOException e) { 
                                e.printStackTrace(); 
                        } 
                } 
                System.out.println("您输入的字符串是:" + sb.toString()); 
        } 
}


 
运行结果:
请您输入一字符串:Hello Java!
您输入的字符串是:Hello Java!

Process finished with exit code 0
while(true) ... break 结构有其等价的格式
 
for(;;){
   //todo:do something
   ... break;
}


但是这些结构的特点就是死循环,并且当某种条件发生的时候,结束循环。
 
终止条件是必须的,否则编译会出错。
终止条件可以是一个条件表达式,比如if语句。也可以是一个try...catch的语句块,在异常发生时候,在catch语句中break----终止掉循环。
 
比如:

/** 
* while(true) ... break 的应用 
* 
* @author leizhimin,2008-10-14 9:05:31 
*/ 
public class ConsoleInput { 
        public static void main(String[] args) { 
                for(int x=10;;x--){ 
                        try{ 
                                System.out.println(10/x); 
                        }catch(Exception e){ 
                                e.printStackTrace(); 
                                break; 
                        } 
                } 
        } 
}


 
运行结果:
1
1
1
1
1
2
2
3
5
10
java.lang.ArithmeticException: / by zero
        at ConsoleInput.main(ConsoleInput.java:12)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)

Process finished with exit code 0

 

举报

相关推荐

0 条评论