4.3 循环结构
重复性的去做某一件事情
4.3.1 while循环
• 语法:
while(条件){
//代码1
}
进入while之后进行条件判断,条件为真时执行while后面大括号中的代码,这里的代码执行完后会返回到while条件继续判断,如果条件为假,结束循环的执行
打印1-10之间所有的数 , 属性循环次数非常的明确
public class Main10 {
public static void main(String[] args) {
int i=1;
while (i<=10) {
System.out.println(i);
i++;
}
}
}
求1-10之间所有数的总和
public class Main9 {
public static void main(String[] args) {
int n1=1;
int sum=0;
while (n1<=10) {
sum += n1;
n1++;
}
System.out.println(sum);
}
}
1、从上面两个案例中可以分析出循环第一要点,循环控制变量的定义
2、循环条件
3、控制变量的更新,如果控制变量不更新,循环性是死循环
问题,小明到学校上学, 给出一个询问是否毕业,是或否,是呢就不再上学了 打印 去工作,否 打印继续学习(属于循环次数不明确的问题)
import java.util.Scanner;
public class Main11 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("小明是否毕业(是/否)?");
String isok=input.next(); //循环控制变量 代码冗余
while("否".equals(isok)){
System.out.println("继续在千锋学习");
System.out.println("小明是否毕业(是/否)?");
isok=input.next(); //循环控制变量
}
System.out.println("出去工作");
}
}
4.3.2 do...while();
语法:
do{
代码块
}while(条件); 最后有一个分号,一定不要忘掉
执行流程:程序进入do...while循环后,循环重复的操作,无论条件的真与假,至少执行一次,因为循环条件在循环操作之后。如果条件为真,返回到do进行重复执行,如果条件为假,就跳出循环
使用do...while解决Main11中代码冗余的问题:
import java.util.Scanner;
public class Main12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String isok=null;
do{
System.out.println("继续在学校学习");
System.out.println("是否毕业");
isok=input.next();
}while ("否".equals(isok));
System.out.println("出去工作");
}
}
无论怎么样,小明先学习一次,进行询问是否毕业,否就继续循环,是就出去工作
上面的代码还是觉得不太适合,我先先询问小明有没有毕业,如果毕业就不用学习了直接工作
import java.util.Scanner;
public class Main12 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String isok=null;
do{
System.out.println("是否毕业");
isok=input.next();
if("是".equals(isok)){ //在这里进行询问毕业的拦截,如果是
break; //break;代表提前结束循环的执行
}
System.out.println("继续在学校学习"); //将学习放到了询问的后面,进行先询问,如果是毕业了,就不再学了
}while ("否".equals(isok));
System.out.println("出去工作");
}
}
do...while使用场景,一般情况下用于这种循环次数不太明确的地方
4.3.3 for 循环
语法:
1 2
for(循环控制变量的定义;循环条件;循环控制变量的更新){
3
循环操作
}
执行流程: 进入for循环后第一步执行循环控制变量的定义,第二步执行循环条件的判断,第三步执行循环的操作,第四执行控制变量的更新,然后回到第二步,继续判断,如果条件真继续第三步,再走第四步,再到第二步。如果条件为假结束循环。
public class Main13 {
public static void main(String[] args) {
for (int i=1;i<=10;i++){
System.out.println(i);
}
}
}
注意:只要是循环的问题可以使用这三个循环结构的任意一个来解决
接下来的内容有利大脑的开发:
问题1:求1-100之间所有数的和
1、循环条件是什么
小于等于100 [循环有明确的循环次数100次]
2、循环控制变量怎么定义(2.1 定义什么 类型的变量。2.2 变量的初始值给不给[如果给,给多少] )
int i=1
3、循环控制变量采用什么样的方式进行更新
i=i+1; i+=1; i++;
4、循环的操作是什么
sum=sum+i;
public class Main14 {
public static void main(String[] args) {
int sum=0;//求和变量
//求和的问题 1-100
for(int i=1;i<=100;i++){
//操作
sum+=i;
}
System.out.println(sum);
}
}
问题2:求1-10之间所有的积
1、循环条件是什么
循环十次,变量小于等于10
2、循环控制变量怎么定义(2.1 定义什么 类型的变量。2.2 变量的初始值给不给[如果给,给多少] )
3、循环控制变量采用什么样的方式进行更新
4、循环的操作是什么
public class Main15 {
public static void main(String[] args) {
int sum=1;
for (int i = 1; i <= 10 ; i++) {
sum*=i;
}
System.out.println(sum);
}
}
问题3:从键盘输入五个数求和
1、循环条件是什么
5
2、循环控制变量怎么定义(2.1 定义什么 类型的变量。2.2 变量的初始值给不给[如果给,给多少] )
i=1 i<=5
3、循环控制变量采用什么样的方式进行更新
i++
4、循环的操作是什么
int num = input.nextInt();
sum+=num;
import java.util.Scanner;
public class Main16 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int sum=0; //求和
int num=0;
for(int i=1;i<=5;i++){
System.out.println("请输入第"+i+"个数");
num=input.nextInt();
sum+=num;
}
System.out.println(sum);
}
}
求1-100中所有偶数和
1、循环条件是什么
循环100次
循环50次
2、循环控制变量怎么定义(2.1 定义什么 类型的变量。2.2 变量的初始值给不给[如果给,给多少] )
i=1
3、循环控制变量采用什么样的方式进行更新
i++; i+=2;
4、循环的操作是什么
if(i%2==0){
sum+=i;
}
int sum=0;
for (int i = 1; i <= 100; i++) {
if(i%2==0){
sum+=i;
}
}
System.out.println(sum);
int sum=0;
for (int i = 0; i <=100 ; i+=2) {
sum+=i;
}
System.out.println(sum);
ontinue; 代表结束本次循环,提前进入下次循环
continue的使用
public class Main17 {
public static void main(String[] args) {
int sum=0;
for (int i = 1; i <= 100; i++) {
if(i%2==1) {
continue;
}
sum+=i;
}
System.out.println(sum);
}
}
break和continue
break;结束当前循环的执行
continue;结束本次循环的执行
问题:输入一个年份,月份和日期求当前日期是当年的第几天。
2022 - 7 - 28
2022 1,2,3,4,5, 6
从一月开始到当前月为止,不包含当前月
import java.util.Scanner;
public class Main22 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int y=input.nextInt();
System.out.println("请输入月份:");
int m=input.nextInt();
System.out.println("请输入日期:");
int d=input.nextInt();
int sum=0;
for (int i = 1; i < m; i++) {
switch (i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
sum+=31;
break;
case 4:
case 6:
case 9:
case 11:
sum+=30;
break;
case 2:
if(y%4==0&&y%100!=0||y%400==0){
sum+=29;
}else{
sum+=28;
}
break;
}
}
sum+=d;
System.out.println(sum);
}
}
break 在switch代表结束switch 在循环中代表结束循环。
如果想让for中的switch中的break结束for的话,这时候,需要指定索引。
import java.util.Scanner;
public class Main22 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int y=input.nextInt();
System.out.println("请输入月份:");
int m=input.nextInt();
System.out.println("请输入日期:");
int d=input.nextInt();
int sum=0;
a:for (int i = 1; i < m; i++) { //a: 就是指定break要结束的索引
switch (i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
sum+=31;
break a; //在break的时候带上索引名就行了
case 4:
case 6:
case 9:
case 11:
sum+=30;
break;
case 2:
if(y%4==0&&y%100!=0||y%400==0){
sum+=29;
}else{
sum+=28;
}
break;
}
}
sum+=d;
System.out.println(sum);
}
}
索引名: for () break 索引名;--》结束的是指定索引名称指引的那层循环
continue也是同样的道理。
public class Demo10 {
public static void main(String[] args) {
//索引名: for()
abc:for (int i = 1; i <= 10 ; i++) {
System.out.println();
for (int j = 1; j <= 20; j++) {
if(j==i){
continue abc; //提前结束外层for循环
}
System.out.print(j+" ");
}
}
}
}
4.4 多重循环
地球和太阳 地球有自转有公转,自转一圈一天,公转一圈一年
所以地球的公转和自转之间的关系你可以理解为二重循环,公转一圈,自转365圈。
while(条件){(表达式1;条件;表达式2){
} }
public class Main23 {
public static void main(String[] args) {
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
外层循环执行一次,内层循环执行一整圈。星号的打印由内层控制,每执行一次打印一颗星,换行由外层循环进行控制,打印完成一行星后立即换行。内层循环控制列,外层循环控制行。
public class Main24 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
打印99乘法表
public class Demo4 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
// \t 转义字符代表制表符 1-4个空格
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println();
}
}
}