4. 循环
(1). while循环
语法:
- while(循环条件){
- 循环体
}
-
解释一下:
-
循环条件结果如果是 true,那么就执行循环体;如果是 false,就结束循环。通俗来说,就是只有满足了循环条件之后才能执行循环体。
(循环条件只有 true 和 false 这两种情况)
还是举例说明吧:
- 打印1到100之间的数;
-
打印1-100之间的所有的奇数和。
// 打印1-100之间的数
class Demo1{
public static void main(String[] args){
int i = 1;
while(i <= 100){
System.out.println(i);
i++;
}
}
}
// 打印1-100之间的所有的奇数和
class Demo1{
public static void main(String[] args){
int i = 1;
int sum = 0; //声明变量,用于存储奇数和
while(i <= 100){
if(i%2 != 0){
sum += i; //sum = sum + i;
}
i++;
}
System.out.println(sum);
}
}
//输出结果:2500
(2). do…while循环
语法:
- do{
- 循环体
}while(循环条件);
-
还是使用上面的例子吧:
- 打印1到100之间的数;
-
打印1-100之间的所有的奇数和。
//打印1-100之间的数
class Demo1{
public static void main(String[] args){
int i = 1;
do{
System.out.println(i);
i++;
}while(i <= 100);
//很明显在这里是先执行循环体,变量i自增之后再进行循环条件的判断
}
}
//打印1-100之间的所有奇数的和
class Demo1{
public static void main(String[] args){
int i = 1;
int sum = 0; //声明一个变量,用于存储奇数和
do{
if(i%2 != 0){
sum += i;
}
i++;
}while(i <= 100);
System.out.println(sum);
}
}
//输出结果:2500
循环的相关内容总结到这里,突然想到很久以前在学C的时候,做到这样的一个习题:“让我们打印出所有三位数的水仙花数”,大脑里第一反应:神马是水仙花数,一脸懵逼,还要让我们用程序去实现它,感觉好坑爹啊,虽然最后历经波折还是把它给做出来了,现在想想都是一把辛酸泪啊。废话说的有点多了,现在既然又提到了这个题目,我还是用java语言再去做一遍吧。
// 打印出所有三位数的水仙花数
// 什么是水仙花数:一个三位数,它的每一位数的位数次幂之和等于这个数本身,这样的数就是水仙花数。比如153
/**
*分析:
循环条件:100-1000之间的三位数
操作:获得这个三位数的每一位,判断是否为水仙花数,自增
*/
class Demo1{
public static void main(String[] args){
int i = 100;
do{
// 获得三位数的每一位
int a = i%10; //个位
int b = (i%100)/10; //十位
int c = i/100; //百位
// 判断是否为水仙花数
if((a*a*a + b*b*b + c*c*c) == i){
System.out.println(i);
}
// 自增
i++;
}while(i < 1000);
}
}
//输出结果为:153、370、371、407
(3). for循环
语法:
- for(表达式1; 表达式2; 表达式3){
- 循环体
}有幸在网上找到一张某个筒子分享的for循环执行顺序图,我就懒得再画了,在这里把它的图贴上来供大家形象的理解,谢谢这位筒子了。
-
循环执行顺序(参照下图):
-
先执行语句1,在判断循环条件是否为真,如果为真,则执行语句2,如果为假,则退出循环;
执行完语句2,接着执行语句3;
执行完语句3,再反过来判断循环条件是否成立,如果成立,在接着执行语句2,然后再去执行语句3。
解释一下:
- 表达式1:计数器的初始化,仅初始化一次
- 表达式2:循环条件的判断,需要多次执行它
-
表达式3:更新计数器,也需要多次执行它
继续举例说明:
-
还是沿用之前的例子:打印1-100之间的所有的奇数和。
// 打印1-100之间的所有的奇数和
/**
* int i = 1; 是计数器的初始化
* i <= 100; 是循环条件,且它要循环多少次就判断多少次
* i++; 是计数器的累加,也是循环几次就累加几次
*/
class Demo1{
public static void main(String[] args){
int sum = 0; //声明变量,用于存储奇数和
for(int i = 1; i <= 100; i++){
if(i%2 != 0){
sum += i;
}
}
System.out.println(sum);
}
}
//输出结果为:2500
-
再举两个比较典型的例子吧:
- 打印6行6列的*
-
打印九九乘法表
//打印6行6列的*
class Demo1{
public static void main(String[] args){
//这是为了控制行
for(int j = 1; j <= 6; j++){
//这是为了控制列
for(int i = 1; i <= 6; i++){
System.out.print("*" + " "); //为了使打印出的*阵好看,再*与*之间加一个空格
}
System.out.println(); //换行
}
}
}
//打印九九乘法表
class Demo1{
public static void main(String[] args){
//做行的循环
for(int i = 1; i <= 9; i++){
//做列的循环
for(int j = 1; j <= i; j++){
System.out.print(j + "*" + i + "=" + (j*i) + "\t");
}
System.out.println();
}
}
}
(4). break
break:结束整个循环
/**
* 一个马拉松运动员,每天早上的训练计划是围着操场跑40圈。
* 可是,今天跑到第10圈的时候,感觉肚子很痛,不能坚持训练了,如何用程序描述呢?
*/
class Demo1{
public static void main(String[] args){
for(int i=1; i<=40; i++){
System.out.println("跑完第"+i+"圈了。");
if(i==10){
System.out.println("肚子很痛,不能跑了...");
break;//退出整个父级循环
}
}
System.out.println("今天训练到此结束!");
}
}
(5). continue
continue:结束当前循环,后续循环照常执行
/**
* 一个马拉松运动员,每天早上的训练计划是围着操场跑40圈。
* 今天跑到第10圈的时候,手机响了,去接个电话回来接着跑完
* 剩下的圈数,如何用程序描述?
*/
class Demo1{
public static void main(String[] args){
for(int i=1; i<=40; i++){
if(i==10){
System.out.println("去接了个电话回来...");
continue;//结束本次循环,继续后续的循环
}
System.out.println("跑完第"+i+"圈了。");
}
System.out.println("今天训练到此结束!");
}
}