第二章、第4节 流程控制

1、接收用户键盘输入Scanner类

​ Scanner就是一种引用类型,用于接收各种数据类型,JDK已经写好了这个类供我们直接使用。步骤有三个:

1、导包。

import java.util.Scanner;

2、创建。

Scanner sc = new Scanner(System.in);//new表示引用类型的对象。

​ PS:其中System.in代表从键盘输入。

3、使用。

​ a) 获取键盘输入的int数字:

​ int num = sc.nextint();

​ b) 获取键盘输入的字符串:

​ String str = sc.next();

​ String str = sc.nextLine();

**提示:**不建议使用nextint(),nextdouble(),nextlong()等各种数据类型。(避免输入错误,无法接收有效的值而产生异常。)

​ 建议使用next()和nextLine(),但不能两者一起混合使用,混用建议nextLine()在next()之前。

示例:

import java.util.Scanner;

public class Demo1{
    
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        String str1 = sc.next();	//如果先输入:Hello World,str1接收输入字符串空格之前的“Hello”
        String str2 = sc.nextLine();//str2接收str1未接收的部分“ World”
        
        System.out.println(str1);	//Hello
        System.out.println(str2);	// World
    }
}

next()和nextLine()的区别:

①next()只能接收一段文字,不能接收空格,遇回车符结束。

②nextLine()只能接收一行文字,能接收空格,遇回车符结束。

2、执行结构

概述:

​ 1996年,计算机科学家Bohm和Jacopini证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。

​ 他们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。

顺序结构:

​ 顺序结构是一种基本的控制语句,它按照语句出现的顺序执行操作。

分支结构:

​ 分支结构又称为选择结构,根据条件成立与否来执行操作。

循环结构:

​ 循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止

3、分支结构

  1. if条件语句

    if条件结构是根据条件判断之后再做处理

    if(条件语句){… …}

    if(条件语句){… …}else{… …}

    if(条件语句){… …}else if(条件语句){… …}

    if(条件语句){… …}else if(条件语句){… …}else{… …}

    例子:用户输入学生成绩,判断成绩是否及格,判断条件为 优良:> 90、良好:81-90、中:60-80、不及格:< 60。

    import java.util.Scanner;
    
    public class Demo2{
        
        public static void main(String[] args){
            Scanner input = new Scanner(System.in);
            System.out.print("请输入考试成绩:");
            int s = input.nextInt();
            
            if(s > 100 || s < 0){
                System.out.println("抱歉,你的成绩不在分数线以内");
            }else if(s >= 90){
                System.out.println("你的成绩为优良");
            }else if(s >= 81 && s < 90){
                System.out.println("你的成绩为良好");
            }else if(s >= 60 && s <= 80){
                System.out.println("你的成绩为合格");
            }else{
                System.out.println("你的成绩为不合格");
            }
        }
    }
    
  2. switch选择语句

    switch(表达式){

    ​ case 取值1:语句块1;break;

    ​ case 取值2:语句块2;break;

    ​ case 取值n:语句块n;break;

    ​ default:语句块n+1;break;

    }

    switch语句有关规则:

    表达式的返回值必须是下述几种类型之一:

    int,byte,char,short,String;

    case子句中的取值必须是常量,且所有case子句中的取值应是不同的;

    default子句是可选的;

    break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下执行!

    case后面的执行体可写{ }也可以不写{ }

    例题:多分支月份输出天数(充分利用语句特性)

    import java.util.Scanner;
    
    public class Demo3{
        
        public static void mian(String[] args){
            Scanner input = new Scanner(System.in);
            System.out.print("请输入一个月份(1-12):");
            String month = input.next();
            
            switch(month){
                case "1":
                case "2":
                case "3":
                    System.out.println("春季");
                    break;
                case "4":
                case "5":
                case "6":
                    System.out.println("夏季");
                    break;
                case "7":
                case "8":
                case "9":
                    System.out.println("秋季");
                    break;
                case "10":
                case "11":
                case "12":
                    System.out.println("冬季");
                    break;
            }
        }
    }
    

4、循环语句

循环语句功能

​ 在循环条件满足的情况下,反复执行特定代码。

循环语句分类

​ for 循环

​ while 循环

​ do / while 循环

  1. while 循环

    符合条件,循环继续执行;否则,循环 退出。

    特点:先判断,再执行。(所谓当型循环)

    语法:

    while(条件表达式){
        语句块;
    }
    
    //死循环
    while(1){
        
    }
    

    使用while循环的步骤:

    ①分析循环条件和循环操作;

    ②套用while语法写出代码;

    ③检查循环是否能够退出。

    例题:录入班级人数和学员成绩,计算班级学员的平均成绩。

    import java.util.Scanner;
    
    public class Demo4{
        
        public static void main(String[] args){
    //        int i = 0;
    //        while(i < 10){
    //            //更新循环变量
    //            i++;
    //            System.out.println("循环在执行" + i);
    //        }
    //         System.out.println("循环结束");
            
            Scanner input = new Scanner(System.in);
            System.out.print("请输入班级总人数:");
            //使用变量studentNum记录班级总人数
            int studentNum = input.nextInt();
            //用于记录循环的次数,以及控制循环何时结束
            int i = 0;
            //定义变量sum,用于统计总分数
            int sum = 0;
            
            while(i < studentNum){
                i++;
                System.out.println("请输入第" + i + "个学生的成绩:");
                int s = input.nextInt();
                sum += s;
            }
            System.out.println("学生的平均成绩为:" + sum / studentNum);
        }
    }
    
  2. do-while 循环

    先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出。

    特点:先执行,再判断。(所谓直到型循环)

    语法:

    do{
        语句块;
    }while(条件表达式);
    
    //死循环
    do{
        
    }while(1);
    

    while循环与do-while循环的区别?

    ​ while:先判断条件,如果条件满足,再执行循环操作。

    ​ do-while:先执行一遍,然后再判断条件,如果条件满足,继续执行循环操作。

  3. for 循环

    语法:

    for(定义循环变量;判断循环变量;更新循环变量){
        语句块;
    }
    
    //死循环:
    for(;;){
        
    }
    

    特殊示例:

    public class Demo5{
        
        public static void main(String[] args){
            for(System.out.println(1);;System.out.println(3)){
        		System.out.println(2);
    		}
            /**
             *输出结果为:
             *1
             *2
             *3
             *2
             *3
             *2
             *3
             *。。。↓(无限,除非停电或死机又或者直接关闭!)
             */
        }
    }
    

5、循环嵌套

示例1:

public class Demo6{
    
    public static void main(String[] args){
        int count = 0;
        for(int i = 0;i < 10;i++){		//外层循环10次,使得有10个内层10次的循环,共计10*10个循环。
            for(int j = 0;j < 10;j++){	//内层循环10次
                count++;
                System.out.println(count);	//输出:1、2、3、。。。、100
            }
        }
    }
}

示例2(打印十行十列星号):

public class Demo7{
    
    public static void main(String[] args){
       //外层循环控制的是行数
       for(int i = 0;i < 10;i++){
           //内层循环控制的是列数
           for(int j = 0;j < 10;j++){
               System.out.print("* ");
           }
           System.out.println();	//打印换行
       } 
        //输出效果如下:
        /*
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        * * * * * * * * * * 
        */
    }
}

6、break与continue

示例:

public class Demo9{
    
    /**
     *break与continue语句
     *	break是用于终止本轮所有次循环。既不执行本次循环中的break后面的语句,直接跳出循环。
     *	continue是用于终止本轮本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
     */
    public static void main(String[] args){
        
        for(int i = 0;i < 10;i++){
            System.out.println(i);	//打印输出:0、1、2、3、4、5(因被break直接跳出)
            if(i == 5){
                break;
            }
        }
        
        for(int i = 0;i < 10;i++){
            System.out.println(i);	//打印输出:0、1、2、3、4、6、7、8、9(因被continue直接跳过)
            
            if(i == 5){
                continue;
            }
        }
    }
}

7、如何退出多层循环

语法:

标签名:循环体1{
    循环体2{
        循环体n{
            break 标签名;
        }
    }
}
//标签名:任意标识符。
//循环体:任意循环语句。
//break 标签名:break跳出指定的循环体,此循环体的标签名必须与break的标签名一致。

示例1:

public class Demo10{
    
    public static void main(String[] args){
        
        Loop:for(int i = 0;i < 10;i++){	//在for循环前用标签标记
            for(int j = 0;j < 10;j++){
                System.out.println("i = " + i + ", j = " + j);
                if(i == 5 && j == 5){	//当且仅当i = 5,且j = 5时,退出外层循环
                    break Loop;			//跳出Loop标签标记的循环体
                }
            }
        }
        //输出结果如下:
        /*
        i = 0, j = 0
        i = 0, j = 1
        i = 0, j = 2
        i = 0, j = 3
        i = 0, j = 4
        i = 0, j = 5
        i = 0, j = 6
        i = 0, j = 7
        i = 0, j = 8
        i = 0, j = 9
        i = 1, j = 0
        i = 1, j = 1
        i = 1, j = 2
        i = 1, j = 3
        i = 1, j = 4
        i = 1, j = 5
        i = 1, j = 6
        i = 1, j = 7
        i = 1, j = 8
        i = 1, j = 9
        i = 2, j = 0
        i = 2, j = 1
        i = 2, j = 2
        i = 2, j = 3
        i = 2, j = 4
        i = 2, j = 5
        i = 2, j = 6
        i = 2, j = 7
        i = 2, j = 8
        i = 2, j = 9
        i = 3, j = 0
        i = 3, j = 1
        i = 3, j = 2
        i = 3, j = 3
        i = 3, j = 4
        i = 3, j = 5
        i = 3, j = 6
        i = 3, j = 7
        i = 3, j = 8
        i = 3, j = 9
        i = 4, j = 0
        i = 4, j = 1
        i = 4, j = 2
        i = 4, j = 3
        i = 4, j = 4
        i = 4, j = 5
        i = 4, j = 6
        i = 4, j = 7
        i = 4, j = 8
        i = 4, j = 9
        i = 5, j = 0
        i = 5, j = 1
        i = 5, j = 2
        i = 5, j = 3
        i = 5, j = 4
        i = 5, j = 5
        */
    }
}

8、图形打印

示例1:

public class Demo11{
    
    public static void main(String[] args){
        /**
         图形1:
         *
         ***
         *****
         ********
            解决方案:
                外层循环控制 行数:4
                内层循环控制 列数:第一行时循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
         */
        for(int i = 0;i < 4;i++){
            for(int j = 2 * i + 1;j > 0;j--){
                System.out.print("*");	//一次打印一个*号,不换行
            }
            System.out.println();		//换行
        }
        /**
         图形2:
             *
            ***
           *****
          *******
            解决方案:
                外层循环控制 行数:4
                内层循环1,控制空格列数:第一行时3个空格,第二行时2个空格,第三行时1个空格,第四行时0个空格。
                内层循环2,控制*号列数:第一行时循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
         */
        for(int i = 0;i < 4;i++){
            for(int j = 3 - i;j > 0;j--){
                System.out.print(" ");	//一次打印一个空格,不换行
            }
            for(int j = 2 * i + 1;j > 0;j--){
                System.out.print("*");	//一次打印一个*号,不换行
            }
            System.out.println();		//换行
        }
        /**
          图形3:
              *
             ***
            *****
           *******
            *****
             ***
              *
            解决方案:
                外层循环控制 行数:7
                分两种情况(if):
                    ①当行数控制在 <= 4时;
                        内层循环1,控制空格列数:第一行时3个空格,第二行时2个空格,第三行时1个空格,第四行时0个空格。
                        内层循环2,控制*号列数:第一行是循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
                    ②当行数控制在 > 4时;
                        内层循环1-1:第五行时1个空格,第六行时2个空格,第七行时3个空格。
                        内层循环1-2,第五行时循环5次,第六行时循环3次,第七行时循环1次。
         */
        for(int i = 0;i < 7;i++){
            if(i <= 3){
                for(int j = 3 - i;j > 0;j--){
                    System.out.print(" ");	//一次打印一个空格,不换行
                }
                for(int j = 2 * i + 1;j > 0;j--){
                    System.out.print("*");	//一次打印一个*号,不换行
                }
            }else{
                for(int j = i - 3;j > 0;j--){
                    System.out.print(" ");	//一次打印一个空格,不换行
                }
                for(int j = 13 - 2 * i;j > 0;j--){
                    System.out.print("*");	//一次打印一个空格,不换行
                }
            }
            System.out.println();			//换行
        }
        /** 
          图形4:
              *
             * *
            *   *
           *     *
            *   *
             * *
              *
            解决方案:
                外层循环控制 行数:7
                分两种情况(if):
                	①当行数控制在 <= 4时;
                		内层循环1,控制空格列数:第1行3个空格,第2行2个空格,第3行1个空格,第4行0个空格。
                		内层循环2,控制*号列数:第1行循环1次(打印1个*号),第2行循环3次(仅第1次和最后一次打印*号),第3行循环5次(同理),第4行循环7次(同理)。
                	②当行数控制在 > 4时;
                		内层循环1-1,控制空格列数:第5行1个空格,第6行2个空格,第7行3个空格。
                		内层循环1-2,控制*号列数:第5行循环5次(仅第1次和最后一次打印*号),第6行循环3次(同理),第7行循环1次(打印1个*号)。
         */
        for(int i = 0;i < 7;i++){
            if(i <= 3){
                for(int j = 3 - i;j > 0;j--){
                    System.out.print(" ");			//一次打印一个空格,不换行
                }
                for(int j = 2 * i + 1;j > 0;j--){
                    if(j > 1 && j < 2 * i + 1){
                        System.out.print(" ");		//一次打印一个空格(受控),不换行
                    }else{
                        System.out.print("*");		//一次打印一个*号,不换行
                    }
                }
            }else{
                for(int j = i - 3;j > 0;j--){
                    System.out.print(" ");			//一次打印一个空格,不换行
                }
                for(int j = 13 - 2 * i;j > 0;j--){
                    if(j > 1 && j < 13 - 2 * i){
                        System.out.print(" ");		//一次打印一个空格(受控),不换行
                    }else{
                        System.out.print("*");		//一次打印一个*号,不换行
                    }
                }
            }
            System.out.println();					//换行
        }
    }
    
}

9、判断用户输入类型

用户输入类型可以通过hasNext类型()方法识别,包括hasNextInt(),hasNextDouble()等等。类型一致,返回true;相反,返回false。

示例:

import java.util.Scanner;

public class Demo12{
    
    //交付标准
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个数字:");
        //在接收输入之前判断输入的类型是否为int,是,返回true,否,返回false
        if(input.hasNextInt()){
            int num = input.nextInt();
            System.out.println("你输入的是:" + num);
        }else{
            System.out.println("输入类型错误!");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值