• 04 循环结构


     

    1.1 为什么要使用循环?

    java中存在3中循环的形式:while/dowhile/for

    1.2 while循环

    [1] 初始化内容
    
    while([2]循环控制条件){
    
    [3]循环操作
    
    [4]迭代变化
    
    }


    需求控制台依次输出1-5 

    public class Test01{
    
    public static void main(String[] args){
    
    // while
    
     
    
    // [1] 初始化内容(循环控制变量)
    
    int i = 1;
    
     
    
    // [2]循环控制条件
    
    while(i<=5){
    
    // [3]输出
    
    System.out.println(i);
    
    // [4] 迭代变化
    
    i++;
    
    }
    
     
    
    }
    
    }


    需求:1+2+3+…10的 

    public class Test02{
    
    public static void main(String[] args){
    
    // 求和:1+2+3+...+10
    
     
    
    int i = 1;
    
    int sum  =0;
    
    while(i<=5){
    
    sum += i;
    
    i++;
    
    }
    
    System.out.println("sum="+sum);
    
     
    
    }
    
    }


    列举法
    :列举循环的执行过程。 

    i

    i<=5

    sum

    i++

    1

    1

    2

    2

    3

    3

    3

    6

    4

    4

    10

    5

    5

    15

    6

    6

     

     

    while可以if结合使用。

    public class Test03{
    
    public static void main(String[] args){
    
    // 求和:1-100偶数的和
    
     
    
    int i = 1;
    
    int sum = 0;
    
    while(i<=100){
    
    if(i % 2 == 0){
    
    sum += i;
    
    }
    
     
    
    i++;
    
    }
    
    System.out.println("sum = "+sum);
    
     
    
    }
    
    }


      

    1.3 do…while 循环

    // [1]初始化
    
    do{
    
       // [2]循环体
    
       // [3]迭代变化
    
    }while([4]循环控制条件)


     
     

    需求:输出1-5

    public class Test06{
    
    public static void main(String[] args){
    
     
    
    int i = 1;
    
    int sum = 0;
    
     
    
    do{
    
    if(i%2==0){
    
    sum += i;
    
    }
    
     
    
    i++;
    
    }while(i<=10);
    
    System.out.println("sum="+sum);
    
    }
    
    }


     
     

    whiledo…while的区别

    相同点:[1]-[4]条件都相同。

    不同点while判断后执行。do…while先执行,后判断dowhile至少执行循环体一次。

    1.4 双层循环

    循环支持嵌套。

     

    需求:控制台输出以下图形

     

    ****

    ****

    ****

     

     

    int i = 1;
    
    int j;
    
    while(i<=3){ // i 控制行
    
     
    
    j=1;
    
    while(j<=4){ // j控制列
    
    System.out.print("*");
    
    j++;
    
    }
    
    System.out.println("");
    
     
    
    i++;
    
    }
    
     


    总结:
     

    双层循环中

    [1] 层循环控制行,内层循环控制列。外层循环执行一次,内层循环执行n

    [2] 时间复杂度和空间复杂度?

    [3] 双层循环中,一定要注意不要过度申请变量。

    [4] 双层循环 =二维结构的问题 =行列问题

     

     

    1.5 for循环

    for([1]初始化;[2]循环控制条件;[4]迭代变化){
    
       [3]循环体
    
    }


    for执行
    过程 

    1. 执行初始化代码
    2. 执行循环控制条件,如果不成立,循环不执行。如果条件成立,执行步骤3
    3. 循环体执行
    4. 迭代变量执行重复2-3-4步骤

     

    需求:1-5输出

    public class Test10{
    
    public static void main(String[] args){
    
     
    
    // 1-5
    
    for(int i=1;i<=5;i++){
    
    System.out.println(i);
    
    }
    
     
    
    }
    
    }

    列举法

    i

    i<=5

    输出

    i++

     

     

     

     

    需求:求1-10所有偶数的和

    public class Test12{
    
    public static void main(String[] args){
    
     
    
    int sum = 0;
    
    for(int i=1;i<=10;i++){
    
    if(i%2 == 0){
    
    sum += i;
    
    }
    
    }
    
    System.out.println("sum="+sum);
    
     
    
    }


     
     

    特殊情况1: 把[1]初始化提升for循环

    public class Test12{
    
    public static void main(String[] args){
    
     
    
     
    
    int i = 1;
    
    for(;i<=10;i++){
    
    System.out.println("*");
    
    }
    
    System.out.println(i);
    
    }
    
    }


    特殊
    情况2:省略[2]循环控制条件=>导致死循环 

    for(int i = 1;;i++){
    
    System.out.println("*");
    
    }


    特殊情况
    3:省略
    [4]迭代变化=>导致死循环 

    for(int i = 1;i<=10;){
    
    System.out.println("*");
    
     
    
    if(条件){
    
    i++;
    
    }else{
    
    i+=2;
    
    }
    
     
    
    }


    总结
     

    [1]死循环 for(;;){} / while(true) / do…while(true)

     

    for循环的回退操作

    import java.util.Scanner;
    
    public class Test13{
    
    public static void main(String[] args){
    
     
    
    Scanner sc = new Scanner(System.in);
    
     
    
     
    
    int up30 = 0;
    
    int age = 0;
    
    for(int i=1;i<=10;i++){
    
    System.out.print("请输入第"+i+"位顾客的年龄:");
    
    age = sc.nextInt();
    
     
    
    if(age < 0){
    
    System.out.println("年龄输入不合法,请重新输入!");
    
    i--;
    
    }else{
    
    if(age >= 30){
    
    up30++;
    
    }
    
    }
    
    }
    
     
    
    System.out.println("30岁以上的比例是"+(up30 / 10.0));
    
    }
    
    }


    复杂
    for循环 

    import java.util.Scanner;
    
    public class Test14{
    
    public static void main(String[] args){
    
     
    
    Scanner sc = new Scanner(System.in);
    
    System.out.println("请输入一个数字:");
    
    int num = sc.nextInt();
    
     
    
    /*
    
    for(int i=0;i<=num;i++){
    
    System.out.println(i+"+"+(num-i)+"="+num);
    
    }
    
    */
    
     
    
    // int i = 1,j = 2;
    
     
    
     
    
    for(int i=0,j=num;i<=num;i++,j--){
    
    System.out.println(i+"+"+j+"="+(i+j));
    
    }
    
     
    
    }
    
    }


    for
    循环的嵌套 

    ****

    ****

    ****

     

    public class Test15{
    
    public static void main(String[] args){
    
     
    
    for(int i=1;i<=3;i++){
    
     
    
    for(int j=1;j<=i;j++){
    
    System.out.print("*");
    
    }
    
     
    
    System.out.println();
    
    }
    
     
    
    }
    
    }

      

     

    1.6 break和continue

    break:用于终止整个循环。

    continue:用于中止本次循环,进入下一次循环。

     

    public class Test16{
    
    public static void main(String[] args){
    
     
    
    /*
    
    // 需求:输出1-10
    
    for(int i=1;i<=10;i++){
    
    // 遇到2就终止整个循环
    
    if(i == 2){
    
    break;
    
    }
    
    System.out.println(i);
    
    }
    
    System.out.println("我是for循环后的语句");
    
    */
    
     
    
    // 需求:输出1-10
    
    for(int i = 1;i<=10;i++){
    
    if(2 == i){
    
    continue;
    
    }
    
    System.out.println(i);
    
    }
    
    }
    
    }

    总结:

    breakcontinue的异同

    相同点: 

    [1]break/continue 后边的语句都不能被执行。

    [2]可以用于循环

     

    不同点

    [1]break终止循环continue 中止循环,继续下一次循环。

    [2]break可以用于跳出switch…case

     

    案例:模拟atm取款

    import java.util.Scanner;
    
    public class Test18{
    
    public static void main(String[] args){
    
     
    
    Scanner sc = new Scanner(System.in);
    
    int type = 0;
    
    boolean willQuit = false;
    
    for(;;){
    
    System.out.println("1.取款\t2.转账\t3.存款\t4.退出");
    
    System.out.print("请选择:");
    
    type = sc.nextInt();
    
     
    
    switch(type){
    
    case 1:{
    
    System.out.println("当前操作取款...");
    
    break;
    
    }
    
    case 2:{
    
    System.out.println("当前操作转账...");
    
    break;
    
    }
    
    case 3:{
    
    System.out.println("当前操作存款...");
    
    break;
    
    }
    
    case 4:{
    
    System.out.println("程序退出,谢谢使用...");
    
    willQuit = true;
    
    break;
    
    }
    
    }
    
     
    
    if(willQuit){
    
    break;
    
    }else{
    
    continue;
    
    }
    
    }
    
    }
    
    }
    import java.util.Scanner;
    
    public class Test19{
    
    public static void main(String[] args){
    
     
    
    Scanner sc = new Scanner(System.in);
    
    int type = 0;
    
    for(;;){
    
    System.out.println("1.取款\t2.转账\t3.存款\t4.退出");
    
    System.out.print("请选择:");
    
    type = sc.nextInt();
    
     
    
    switch(type){
    
    case 1:{
    
    System.out.println("当前操作取款...");
    
    continue;
    
    }
    
    case 2:{
    
    System.out.println("当前操作转账...");
    
    continue;
    
    }
    
    case 3:{
    
    System.out.println("当前操作存款...");
    
    continue;
    
    }
    
    case 4:{
    
    System.out.println("程序退出,谢谢使用...");
    
    break;
    
    }
    
    }
    
     
    
    break;
    
     
    
    }
    
    }
    
    }

     

    1.7 作业

    1.输出9*9乘法
    
     
    
    2.
    
      *
    
     * *
    
    * * *
    
     
    
    3.
    
      *
    
     * *
    
    * * *
    
     * *
    
      *
    
      
    
    4.
    
      *
    
     * *
    
    *   *
    
     * *
    
      *

     

    本文作者:___mouM
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。
    版权说明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.
  • 相关阅读:
    1.Lucene
    docker 安装常用服务
    docker 常用命令
    05-vue中使用样式
    04-vue的事件修饰符
    03-用基本指令实现跑马灯效果
    02-vue基本指令
    01-vue分层概念MVVM
    Redis-持久化机制
    BigDecimal工具类
  • 原文地址:https://www.cnblogs.com/aknife/p/10784623.html
Copyright © 2020-2023  润新知