理解一:
1、while适合用于状态变化控制,说高大上点就是while适合做状态机,而for仅仅是为了循环而循环
2、另外一个区别,for循环一般都是这么用的,for(int i=xx;i<xx;i++);重点是关于循环控制变量i是在for中声明的(不是说不可以声明在for外面,只是一般都是这么用),这样的话,在for循环结束后,i会被释放,可以优化内存空间,如果你在8051单片机上写过程序,你的内存只有2k-8k,你会格外珍惜内存的使用;而相对来说,while循环跳出后控制变量不会被释放,还可以继续使用
3、和一有点类似,通常刚学程序的时候会告诉你应尽量避免死循环,但是慢慢你会发现会有很多
while(1){。。。。};比如说侦听,我们需要一个死循环来不断进行侦听,然后发现有接入就开辟一个新的线程去处理(类比FTP机制)。
理解二:
一个需求:使用for循环和while循环都可以去实现,那么到底两者之间有什么区别?
从内存角度考虑:
局部变量在栈内存中存在,当for循环语句结束,那么变量会及时被gc(垃圾回收器)及时的释放掉,不浪费空间
如果使用循环之后还想去访问循环语句中控制那个变量,使用while循环
从应用场景角度考虑:
如果一个需求明确循环的次数,那么使用for循环(开发中使用for循环的几率大于while循环)
如果一个需求,不知道循环了多少次,使用while循环
*举例:吃葡萄!
public class WhileDemo4 {
public static void main(String[] args) {
//使用for循环
for(int x = 1 ; x <=5 ; x++) {
System.out.println(“我爱高圆圆”);
}
//访问for循环中控制的那个变量x
// System.out.println(x);
//使用while循环
int x = 1 ;
while(x<=5) {
System.out.println(“我爱高圆圆”); x ++ ;
}
//可以访问变量
System.out.println(x);
}
}
理解三:
做循环的时候,首先要把思路理清楚,回答四个问题:
(1)初始化条件?
(2)控制循环的条件?
(3)反复做的事?
(4)怎样进入下一循环?
eg:对1到100求和
(1)初始化条件:sum=0;num=1
(2)控制循环的条件:num<=100
(3)反复做的事:sum = sum + num(或sum += num)
(4)怎样进入下一循环:num++
这样就能轻松写出循环
int sum = 0;
int num = 1;
while(num <= 100) {
sum+=num;
num++;
}
用do……while改写
int sum = 0;
int num = 1;
do { sum += num; num++;
}while(num<=100)
用for循环改写
int sum = 0;
for(int num=1; num<=100;num++){
sum += num;
}
for循环是比较难理解的,但是我们可以将num=1; num<=100看作num的取值范围为[1,100],步长为1。这样就有利于for循环的理解。
综上,三种循环是可以替换的,但是三种循环也有一定的差异:
for循环适用于知道范围的情况(或知道循环次数的情况),当循环次数(或范围)不确定时用while循环或do……while循环。
while循环和do…….循环,当第一次进入循环就不满足条件时,while循环不做,do……while执行一次。其他情况输出结果是一样的。
区别:
while循环:默认按行(回车符“/r”、换行符“/n”)分割文件
for循环:默认按照任意空白字符(如:空格、tab)等分割文件,可以使用IFS进行自定义
有一文本文件如下,每行有两个字符串/空格分开。
$ cat list.txt
Gly G
Ala A
for line in `cat list.txt`
do
echo $line
done
得到结果如下:
Gly
G
Ala
A
============
while read line
do
echo $line
done list.txt
运行得到结果如下:
Gly G
Ala A
来源于网络
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1800.html