现在有一个需求:打印1-100的数字,每10个换一行。
如果我们直接使用输出语句的话,会打印到崩溃。。。
Java中除了有顺序结构、选择结构,也有循环结构,可以用循环结构来解决这个问题:从定义一个变量一开始为1,每输出一个数,变量就+1,直到变量等于100,就结束。
Java中有三种循环:while,do...while,for
1.while
语法:
初始化语句;
while(条件表达式)
{ //循环体
//满足条件(为 true 时)执行语句
//迭代语句(退出机制,当不再满足条件时就会退出)
}
//不满足条件则会直接跳过
package com.dh.control;
public class WhileDemo {
public static void main(String[] args) {
//1.初始化变量
int i = 1;
//count用于计数(10个数换一行)
int count = 0;
while(i<=100){ //2.条件表达式
//3.执行语句
System.out.print(i+"\t");
count++; //计数器+1
if(count%10 == 0){
System.out.println();
}
//4.迭代语句(退出机制)
i++;
}
}
}
注意:如果没有退出机制,或者条件永远为true时,程序就没有办法跳出循环,程序就会一直运行,称为死循环。
一定要尽量避免书写死循环程序,除非真的有使用死循环的需求!
while(true){
}
2.do...while
语法:
初始化语句;
do{
//循环执行体
//迭代语句
}while(条件表达式); //不满足条件表达式则跳过则结束循环语句
将上述问题,采用do...while循环来解决:
package com.dh.control;
public class DoWhile {
public static void main(String[] args) {
int i = 1;
int count = 0;
do{
System.out.print(i+"\t");
i++;
count++;
if(count%10 == 0){
System.out.println();
}
}while (i<=100);
}
}
那while和do...while有什么区别呢?看下面这个案例
package com.dh.control;
public class Demo {
public static void main(String[] args) {
int i = 1;
//do...while
do {
System.out.println("do...while执行了");
} while (i < 0);
//while
while (i < 0) {
System.out.println("while执行了");
}
}
}
通过观察实验结果,可以看出do...while和while的用法是一致的,只不过do…while 先执行再判断(无论如何都会先执行一次循环执行体中的代码)、while 是先判断再执行,如果条件一开始就不满足,就不会执行循环执行体代码。
3.for
语法:
for((1)初始化变量;(2)条件;(4)更新循环遍历){
//(3)循环体
}
(按照 1234 的顺序执行,1 和 4 可以放在外部,2 省略了的话没有结束条件将会死循环)
我们再用for来解决上述问题:
package com.dh.control;
public class ForDemo {
public static void main(String[] args) {
int count = 0;//计数器
for(int i = 1;i<=100;i++){ //初始化变量;结束条件;迭代变量(退出机制)
System.out.print(i+"\t");
count++;
if(count%10 == 0){
System.out.println();
}
}
}
}
可以看到,也是可以输出结果的,在大多数情况下,for循环会比while、do...while循环更简洁,推荐使用for循环!
将初始化变量和变量迭代放在for()外,也是可以的,但是建议放在里面:
4.break和continue的用法和区别
break
如果现在改了需求呢:我想决定我什么时候不再输出了,即我想让它输出到多少就到多少。
此时就需要一个还未等到循环终止条件,就强制退出的机制,在switch的时候,我们使用了break,在while里也是一样的。
此处使用for循环作为循环结构:while和do...while同理
package com.dh.control;
public class BreakDemo {
public static void main(String[] args) {
int count = 0;
for(int i = 1;i<=100;i++){
System.out.print(i+"\t");
//使用break退出循环
if(i == 55){
break;
}
count++;
if(count%10 == 0){
System.out.println();
}
}
}
}
可以看到,程序输出到55的时候就不再继续输出了。
continue
但是此时我们又修改了需求呢,我想打印1-100之间除了5的倍数的数,一行输出8个。
此时通过分析需求,只要我们可以跳过某次循环,即5的倍数的时候就跳过,再继续循环,就可以达到目的了。
Java使用continue来跳出当前次的循环
package com.dh.control;
public class ContinueDemo {
public static void main(String[] args) {
int count = 0; //计数器
for(int i = 1;i<=100;i++){ //初始化变量;结束条件;迭代变量(退出机制)
//使用continue跳出当前循环,遇到continue就跳出,不再执行剩余循环执行体里面的代码
//回到for
if(i % 5 == 0){
continue;
}
System.out.print(i+"\t");
count++;
if(count%8 == 0){
System.out.println();
}
}
}
}
我们来看看结果:
结果是达到了我们的需求的。
总结:
- break:用于跳出整个循环。(通常在循环中与条件语句一起使用,也可用于选择语句);
- continue:跳过当前次循环,即跳过循环体中剩余的语句而执行下一次循环(只能用在循环里,也通常和条件语句一起使用,加速循环)。