关于while(true)的总结

1、在java网络通讯的程序里原本有一段是这样的:

while(in.readLine()!=null){
      String aa=in.readLine();
}

       结果发现读取老是错误,后来我试了用下面的方法
while(true){
     String aa=in.readLine();
}
       结果读取成功!这程序咋一看差不多,我们考虑第一个程序,当程序读到,while(in.readLine()!=null)的时候,程序发生了阻塞,等待读入,如果读入成功,就执行下一个循环,下一个已开始也是阻塞,接着再读入,如此反复。而第二个是一开始就循环,但是读到String aa=in.readLine()的时候也发生阻塞,也是读入后才发生后面的事情,然后再循环,表明上看好像是一样的,但是结果为什么不一样呢!!!

       后来我才弄明白,原来第一个在读到while(in.readLine()!=null)的时候,如果有数据,那么执行String aa=in,readLine()的时候程序会继续往下读,也就是第一个while里面的读入被抛弃了,如果程序读入的只有是一行的话,那么这行就不会读入!!


2、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
 
从上面可以结果可以看出,发生异常也可以作为循环终止条件。
在Python中,while True用于创建一个无限循环的结构。这种循环会一直执行,直到满足某个条件才会跳出循环。引用中提到了两个案例来说明while True的用处。 案例一是打印成绩并求平均数。在这个案例中,可以使用while True来实现一个循环,不断地输入学生的成绩,并计算总分和平均分。在每次输入成绩前,可以使用while True来确保输入的成绩在合理的范围内。只有当输入的成绩满足条件时,才会跳出内部的循环,继续下一个学生的成绩输入。最后,可以通过计算总分除以学生数量来得到平均分数。引用中给出了一个使用while True的例子来计算平均成绩。 案例二是猜字游戏。在这个案例中,可以使用while True来创建一个循环,让玩家可以一直猜测一个随机数,直到猜对为止。在每次猜测前,可以使用while True来确保输入的猜测在合理的范围内。只有当猜测的数与目标数相等时,才会跳出内部的循环,结束游戏。在游戏结束后,可以给玩家一个选择是否继续玩的机会,使用while True来创建一个循环,直到玩家选择退出游戏。引用中给出了一个使用while True的例子来实现猜字游戏。 总结而言,while True在Python中用于创建一个无限循环的结构,在某些情况下可以用来实现需要反复执行的代码块。可以通过内部的条件判断来控制循环的终止条件,从而实现不同的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python中while True的用处](https://blog.csdn.net/Python_XTyyds/article/details/121410962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值