java---程序结构(下)

2023-10-17 09:10:20 浏览数 (1)

4.3 循环结构

重复性的去做某一件事情

4.3.1 while循环
代码语言:javascript复制
• 语法:
while(条件){            
	//代码1
}

进入while之后进行条件判断,条件为真时执行while后面大括号中的代码,这里的代码执行完后会返回到while条件继续判断,如果条件为假,结束循环的执行

打印1-10之间所有的数 , 属性循环次数非常的明确

代码语言:javascript复制
public class Main10 {

    public static void main(String[] args) {

        int i=1;

        while (i<=10) {

            System.out.println(i);

            i  ;

        }


    }

}

求1-10之间所有数的总和

代码语言:javascript复制
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、控制变量的更新,如果控制变量不更新,循环性是死循环

问题,小明到学校上学, 给出一个询问是否毕业,是或否,是呢就不再上学了 打印 去工作,否 打印继续学习(属于循环次数不明确的问题)

代码语言:javascript复制
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();
代码语言:javascript复制
语法:
do{
	代码块
}while(条件);   最后有一个分号,一定不要忘掉

执行流程:程序进入do...while循环后,循环重复的操作,无论条件的真与假,至少执行一次,因为循环条件在循环操作之后。如果条件为真,返回到do进行重复执行,如果条件为假,就跳出循环

使用do...while解决Main11中代码冗余的问题:

代码语言:javascript复制
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("出去工作");

    }

}

无论怎么样,小明先学习一次,进行询问是否毕业,否就继续循环,是就出去工作

上面的代码还是觉得不太适合,我先先询问小明有没有毕业,如果毕业就不用学习了直接工作

代码语言:javascript复制
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 循环
代码语言:javascript复制
语法:
		    1                                2                   
for(循环控制变量的定义;循环条件;循环控制变量的更新){
				     3		
				循环操作
}

执行流程: 进入for循环后第一步执行循环控制变量的定义,第二步执行循环条件的判断,第三步执行循环的操作,第四执行控制变量的更新,然后回到第二步,继续判断,如果条件真继续第三步,再走第四步,再到第二步。如果条件为假结束循环。

代码语言:javascript复制
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;

代码语言:javascript复制
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、循环的操作是什么

代码语言:javascript复制
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;

代码语言:javascript复制
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;

}

代码语言:javascript复制
int sum=0;

        for (int i = 1; i <= 100; i  ) {

            if(i%2==0){

                sum =i;

            }

        }

        System.out.println(sum);
代码语言:javascript复制
int sum=0;

        for (int i = 0; i <=100 ; i =2) {

            sum =i;

        }

        System.out.println(sum);
代码语言:javascript复制
ontinue;      代表结束本次循环,提前进入下次循环
continue的使用
代码语言:javascript复制
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

从一月开始到当前月为止,不包含当前月

代码语言:javascript复制
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&&y0!=0||y@0==0){

                  sum =29;

              }else{

                  sum =28;

              }

              break;

      }

  }

  sum =d;

  System.out.println(sum);

}

}

break 在switch代表结束switch 在循环中代表结束循环。

如果想让for中的switch中的break结束for的话,这时候,需要指定索引。

代码语言:javascript复制
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&&y0!=0||y@0==0){

                  sum =29;

              }else{

                  sum =28;

              }

              break;

      }

  }

  sum =d;

  System.out.println(sum);

}

}

索引名: for () break 索引名;--》结束的是指定索引名称指引的那层循环

continue也是同样的道理。

代码语言:javascript复制
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圈。

代码语言:javascript复制
while(条件){(表达式1;条件;表达式2){
}											}
代码语言:javascript复制
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();

        }

    }

}

外层循环执行一次,内层循环执行一整圈。星号的打印由内层控制,每执行一次打印一颗星,换行由外层循环进行控制,打印完成一行星后立即换行。内层循环控制列,外层循环控制行

代码语言:javascript复制
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乘法表

代码语言:javascript复制
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();

        }

    }

}

0 人点赞