Java最全for、while、do–while循环详细讲解
友情提示:要想学的好,代码不能少,多敲代码多练习
循环结构
循环:就是重复的执行,程序中某些代码也是需要重复执行的。使用循环的好处,减少重复代码量
for循环
语法
for(初始化变量;循环条件;改变变量的值){
循环体;
}
效果:循环体会被重复执行
for循环的执行的顺序:
1.获取变量的初始值
2.判断循环条件是否成立,如果成立,则执行循环体;如果不成立,结束整个循环
3.给变量重新赋值,进行下一次循环判断
public class Demo1 {
public static void main(String[] args) {
//循环3次的for循环
for(int i=0;i<3;i++){
System.out.println("被循环的代码");
}
}
}
上面这个代码详细讲解一下循环过程,帮助大家理解
public class Demo1 {
public static void main(String[] args) {
/*
第一次循环:
初始化: i = 0
判断循环条件: i<3 成立
打印循环体:
执行i++: i = 1
第二次循环:
判断循环条件: i<3 成立
打印循环体i:
执行i++: i = 2
第三次:
判断循环条件: i<3 成立
打印循环体i:
执行i++: i = 3
第四次:
判断循环条件: i<3 不成立
循环结束
*/
int i;
for(i=0;i<3;i++){
System.out.println("被循环的代码" + i);
}
System.out.println(i);//3
}
}
练习题
1.计算1~100的所有整数的和
public class Practise1 {
public static void main(String[] args) {
int sum = 0;//用来记录累加的和
for (int i=1;i<=100;i++){//i的取值范围是:1~100 刚好就是需要被累加的所有的整数
sum += i;
}
System.out.println("累加的和:"+sum);
}
}
2.打印出所有的水仙花数,水仙花数:3位的正整数,每一个位的立方加起来的和等于这个数本身,比如153
public class Practise2 {
public static void main(String[] args) {
/*
打印出所有的水仙花数
水仙花数:3位的正整数,每一位的立方加起来的和等于这个数本身,比如153
思路:将每一个3位的正整数都判断一次
*/
//1.取出每一个3位的正整数
for (int i = 100; i <= 999; i++) {//i的取值范围:100~999 刚好就是所有的3位正整数
//2.取出该数每一位的值
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
//3 判断每一位数的立方的和是否等于这个数本身
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
System.out.println(i);
}
}
}
}
嵌套循环
for(...){
for(...){
}
}
效果:
外层循环每执行一次,内存循环都会完整的执行一遍
public class Demo2 {
public static void main(String[] args) {
for(int i=0;i<5;i++){
for (int j = 0; j < 5; j++) {
System.out.println(i +"," + j);
}
}
}
}
打印图形练习
1.打印矩形:
* * * *
* * * *
* * * *
* * * *
要求:一个输出语句只能打印一个*
public class Practise3 {
public static void main(String[] args) {
for (int j=0;j<4;j++){
for (int i=0;i<4;i++){
System.out.print("* ");
}
System.out.println();
}
}
}
2.打印三角形
*
* *
* * *
* * * *
要求:一个输出语句只能打印一个*
public class Practise4 {
public static void main(String[] args) {
for (int j=0;j<4;j++){//行数
/*
i < 数字
这个数字就不能是一个固定的值
应该是一个变量
这个变量的值的规律:外层循环第一次循环是,数字为1
外层循环第二次循环是,数字为2
外层循环第三次循环是,数字为3
外层循环第四次循环是,数字为4
*/
for (int i=0;i<j+1;i++){//列数
System.out.print("* ");
}
System.out.println();
}
}
}
3.打印如下图形:
*****
****
***
**
*
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<5;i++){
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
}
4.打印如下图形:
*****
****
***
**
*
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<5;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>i;j--){
System.out.print("*");
}
System.out.println();
}
}
5.打印如下图形:
*
***
*****
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
System.out.print("*");
}
System.out.println();
}
}
6.打印如下图形:
*
* *
*****
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<3;i++){
for(int k = 2;k>i;k--){
System.out.print(" ");
}
for(int j = 0;j<i*2+1;j++){
if(i==0 || i==2 || j==0 || j==i*2){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
7.打印如下图形:
*****
***
*
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
System.out.print("*");
}
System.out.println();
}
}
8.打印如下图形:
*****
* *
*
public class Practise4 {
public static void main(String[] args) {
for(int i = 0;i<3;i++){
for(int k = 0;k<i;k++){
System.out.print(" ");
}
for(int j = 5;j>=i*2+1;j--){
if(i==0 || i==2 || j==5 || j==i*2+1){
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
打印九九乘法表
public class Practise4 {
public static void main(String[] args) {
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j + "x" + i + "=" + (i*j) + "\t");
}
System.out.println();
}
}
while循环
while循环的使用和for基本一致,需要深入的同学可以将上面练习的代码改写成while循环语句。
语法
while(条件){
循环体;
}
只要条件成立,就执行一次循环体。知道条件不成立
public class Demo1 {
public static void main(String[] args) {
/*
打印1~3的所有整数
*/
int i = 1;
/*
进入while语法:
第一次循环: i = 1 条件成立 执行循环体(将i变为2)
第二次循环: i = 2 条件成立 执行循环体(将i变为3)
第三次循环: i = 3 条件成立 执行循环体(将i变为4)
第四次循环: i = 4 条件不成立成立 结束循环
*/
while (i<=3){
System.out.println(i);
i++;
}
}
}
案例:我有个梦想,每月存3000,每年递增1000元,多少个月后存满20万
public class Demo1 {
public static void main(String[] args) {
int money = 3000;
int allMoney = 0;
int month = 0;
while(allMoney < 200000){
allMoney+=money;
month++;
if(month % 12 == 0){
money+=1000;
}
}
System.out.println(month + "个月以后存满20万 " + money);
}
do-while循环
do{
代码块;
}while(条件);
先执行代码块,再判断条件。 条件成立,继续循环。 条件不成立,循环结束
特点:代码块至少会执行一次
**案例:**珠穆朗玛峰高8848米,现在有一张无限大的纸,厚0.01米,问这张纸对折多少次能达到珠穆朗玛峰的高度?分别使用for循环与while循环来解。
public class Practise1 {
public static void main(String[] args) {
//使用for循环
int count = 0;
for(double ply = 0.01; ply < 8848; ply *= 2){
count++;
}
System.out.println("需要对折" + count + "次");
//使用while循环
double ply = 0.01;
int count2 = 0;
while(ply < 8848){
count2++;
ply *= 2;
}
System.out.println("需要对折" + count + "次");
}
}
三大循环的区别及应用场景
-
语法结构的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){ }
do{ }while(判断条件); -
**循环共同点:**判断条件的结果都是boolean值,true-循环 false-跳出循环
-
执行顺序的区别:
for:先判断,再执行
while:先判断,再执行
do-while:先执行一遍,再判断 -
各自使用场景:
循环次数确定:for
循环次数不确定,先判断,再执行:while
循环次数不确定,先执行一遍,再判断:do-while
循环中的关键字
-
break:结束当前循环
案例:循环录入小明同学5门课的成绩并计算平均分,如果某分数录入为负停止录入并提示。
public class Practise1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double sum = 0;
boolean flag = true;//true-5次正常录入 false-有输入负数的情况
for(int i = 1;i<=5;i++){
System.out.println("请输入第" + i + "门成绩:");
double score = scan.nextDouble();
if(score < 0){
flag = false;
break;
}
sum+=score;
}
if(flag){
double avg = sum/5;
System.out.println("平均分为:" + avg);
}else{
System.out.println("分数为负数,停止录入");
}
}
}
-
continue:结束本次循环,并立即开始下一次循环
案例:循环录入Java课5名学生的成绩,统计分数大于等于80分的学生比例。
public class Practise1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = 0;//记录成绩大于等于80分学生的人数 for(int i = 1;i<=5;i++){ System.out.println("请输入第" + i + "名学生的成绩:"); double score = scan.nextDouble(); if(score < 80){ continue; } num++; } System.out.println("分数大于等于80分的学生比例为:" + (num/5.0*100) + "%"); } }
-
return:结束当前方法
public class ReturnDemo { public static void main(String[] args) { for (int i = 0; i < 4; i++) { if(i == 2){//在打印第三行之前 使用return结束了当前方法(就是main方法) return; } for (int j = 0; j < 4; j++) { System.out.print(""+i+j+" "); } System.out.println(); } System.out.println("所有的循环都结束了...."); } }
-
lable:循环的标签
public class Test06{
public static void main(String[] args){
/**
知识点:lable的运用
需求:嵌套for循环,外层循环5次,内层循环3次,
外层循环到第3次时,在内层循环中退出外层循环
*/
flag:for(int i = 1;i<=5;i++){
for(int j = 1;j<=3;j++){
System.out.println(i + " -- " + j);
if(i == 3){
break flag;
}
}
}
}
}
注意事项
return:可以写在任何一个方法中
break与continue,在嵌套循环中,只能结束当前的那一层循环