21.Scanner使用的基本步骤

(1)导包

导包的动作必须出现在类定义的上面

import java.util.Scanner;

(2)创建对象

下面这个格式里面,只有sc是变量名,可以变。其他的都不允许变

Scanner sc = new Scanner(System.in);

(3)接收数据

下面这个格式里面,只有i是变量名,可以变,其他的都不允许变

int i = sc.nextInt();
import java.util.Scanner;
public class test1 {
     public static void main(String[] args) {
        //创建对象
        Scanner sc = new Scanner(System.in);
        //接受数据
        int i = sc.nextInt();
        //输出数据
        System.out.println("i:"+i);
        

    }
    
}//输入数据 4 输出:i=4

案例:三个和尚升级版

三个和尚身高必须经过测量得出,请用程序实现获取这三个和尚的最高身高

分析:

(1)身高未知,采用键盘录入实现,首先导包,然后创建对象

import java.util.Scanner;
Scanner sc =new Scanner(System.in);

(2)键盘录入三个身高分别赋值给三个变量

int height1 =sc.nextInt();
int height2 =sc.nextInt();
int height3 =sc.nextInt();

(3)用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来

(height1>height2)?height1:height2;

(4)用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存

(tempHeight>height3)?tempHeight:height3;

(5)输出结果

import java.util.Scanner;
public class test1 {
     public static void main(String[] args) {        
        Scanner sc =new Scanner(System.in);
        //(1102)键盘录入三个身高分别赋值给三个变量
        System.out.println("请输入第一个和尚身高");
        int height1 =sc.nextInt();
        System.out.println("请输入第二个和尚身高");
        int height2 =sc.nextInt();
        System.out.println("请输入第三个和尚身高");
        int height3 =sc.nextInt();
        //(3)用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来
        int tempHeight =(height1>height2)?height1:height2;
        //(4)用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存
        int maxHeight =(tempHeight>height3)?tempHeight:height3;
        //(5)输出结果
        System.out.println("这三个和尚中身高最高的是:"+ maxHeight);
        }
     }//输入110  111  112  输出:这三个和尚中身高最高的是:112

22.流程控制

顺序结构

顺序结构是程序中最简单最基本的流程控制,,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的

分支结构(if ,switch)

if语句格式1

格式:

if(关系表达式){
语句体;
}

执行流程

1.首先计算关系表达式的值

2.如果关系表达式的值为true就执行语句体

3.如果关系表达式的值为false就不执行语句体

4.继续执行后面的语句内容

//定义两个变量
        int a = 10;
        int b = 20;
        //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
        if(a==b){
            System.out.println("a等于b");
        }
        //需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于c
        int c =10;
        if(a==c){
            System.out.println("a等于c");
        }

        System.out.println("结束");
        //输出:a等于c
            //结束

if语句格式2

if(关系表达式){
语句体1;
}else{
语句体2;
}

执行流程

1.首先计算关系表达式的值

2.如果关系表达式的值为true就执行语句体1

3.如果关系表达式的值为false 就执行语句体2

4.继续执行后面的语句内容

int a = 10;
        int b = 20;
        b = 5 ;
        //需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,如果不是,在控制台输出:a的值不大于b
        if(a>b){
            System.out.println("a的值大于b");
        } else {
            System.out.println("a的值不大于b");
        }
        System.out.println("结束");
        //输出:a的值大于b
        //     结束

案例: 奇偶数

需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数

分析:

(1)为了体现任意给出的整数,采用键盘录入一个数据

(2)判断整数是偶数还是奇数还要分两种情况进行判断,使用if..else 结构

(3)判断是否偶数需要使用取余运算符实现该功能number%2==0

if(number % 2 ==0){
} else {
}

(4)根据判定情况,在控制台输出对应的内容

if(number % 2 ==0){
System.out.printIn(number + "是偶数");
} else {
System.out.printIn(number + "是奇数");
}
Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int number = sc.nextInt();
        if(number%2==0){
        System.out.println(number + "是偶数");
        } else {
        System.out.println(number + "是奇数");
        }//输入:9 输出:9是奇数

if语句格式3

格式:

if(关系表达式1){
语句体1;
} else if (关系表达式2){
语句体2;
}
...
else{
语句体n+1;
}

执行流程:

(1)首先计算关系表达式1的值

(2)如果值为true就之行语句体1;如果值为false就计算关系表达式2的值

(3)如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

(4)...

(5)如果没有任何关系表达式为true,就执行语句体n+1

System.out.println("开始");
        //需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个星期数(1-7)");
        int week = sc.nextInt();
        if(week ==1){
            System.out.println("星期一");
        } else if(week == 2){
            System.out.println("星期二");
        }else if(week == 3){
            System.out.println("星期三");
        }else if(week == 4){
            System.out.println("星期四");
        }else if(week == 5){
            System.out.println("星期五");
        }else if(week == 6){
            System.out.println("星期六");
        }else if(week == 7){
            System.out.println("星期七");
        }
        System.out.println("结束");

案例:考试奖励

需求:小明快要考试了,小明爸爸对他说,会根据他不同的考试成绩,送给他不同的生日礼物,假如你可以控制小明的得分,请用程序实现小明到底应该获得什么样的礼物,并在控制台输出

分析:

(1)小明的考试未知,可以使用键盘录入的方式获取值

使用键盘录入功能需要导包,创建数据,接收数据

(2)由于奖励过多,属于多种判断,采用(if ...else)

(3)为每种判断设置对应的条件

if(score ≥ 95 &&score ≤ 100) {
}else if (score ≥ 90 && score ≤ 94){
}else if (score ≥ 80 && score ≤ 89){
}else{
}

(4)为每种判断设置对应奖励

System.out.println("悟2无人机");
System.out.println("Magic 3 pro 无人机");
System.out.println("fpv 穿越机");
System.out.println("mini 3 pro 无人机");
Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个分数");
        int score = sc.nextInt();
        //数据测试: 正确数据,边界数据,错误数据
        if(score>100||score<0){
            System.out.println("你输入了一个错误的分数");
        }else if(score>=95&&score<=100){
            System.out.println("悟2无人机");

        }else if(score>=90&&score<=94){
            System.out.println("Magic 3 pro 无人机");

        }else if(score>=80&&score<=89) {
            System.out.println("fpv 穿越机");

        }else {
            System.out.println("mini 3 pro 无人机");

        }

switch语句

格式:

switch(表达式){

case 值1:
语句体1;
break;
 case 值2:语句体2;
break;
...
default:
语句体n+1;
[break;]
}

格式说明:

表达式:取值为byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是String

case:后面跟的是要和表达式进行比较的值

break:表示中断,结束的意思,用来结束switch语句

default:表示所有情况都不匹配的时候,就执行该处的语句,和if语句的else相似

Scanner sc = new Scanner(System.in);
         System.out.println("请输入一个星期数(1-7)");
        
         int week = sc.nextInt();
         switch(week) {
            case 1:
            System.out.println("星期一");
            break;
            case 2:
            System.out.println("星期二");
            break;
            case 3:
            System.out.println("星期三");
            break;
            case 4:
            System.out.println("星期四");
            break;
            case 5:
            System.out.println("星期五");
            break;
            case 6:
            System.out.println("星期六");
            break;
            case 7:
            System.out.println("星期天");
            break;
            default:
            System.out.println("你输入的是什么东西!");
            break;
         }
         System.out.println("结束");

案例:春夏秋冬

需求:一年有12个月,分别属于春夏秋冬四个季节,键盘录入一个部分,请用程序实现判断改月份属于哪个季节,并输出

分析:

(1)键盘录入月份数据,使用变量接收

(2)多情况判断,这里采用switch语句实现

switch(month){
case X:
case X:
case X:
default:
}

(3)在每种情况中,完成输出对应的季节(选择了几个)

case 3:

System.out.printIn("春季");

break;

//方式1
Scanner sc = new Scanner(System.in);
          System.out.println("请输入一个月份(1-12)");
        
         int week = sc.nextInt();
         switch(week) {
            case 1:
            System.out.println("冬季");
            break;
            case 2:
            System.out.println("冬季");
            break;
            case 3:
            System.out.println("春季");
            break;
            case 4:
            System.out.println("春季");
            break;
            case 5:
            System.out.println("春季");
            break;
            case 6:
            System.out.println("夏季");
            break;
            case 7:
            System.out.println("夏季");
            break;
            case 8:
            System.out.println("夏季");
            break;
            case 9:
            System.out.println("秋季");
            break;
            case 10:
            System.out.println("秋季");
            break;
            case 11:
            System.out.println("秋季");
            break;
            case 12:
            System.out.println("冬季");
            break;
            default:
            System.out.println("你输入的什么东西");
            break;
         }
         System.out.println("结束");

注意事项:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行,直到遇见break,或者整体switch结束

//方式2 case穿透
Scanner sc = new Scanner(System.in);
          System.out.println("请输入一个月份(1-12)");
        
         int week = sc.nextInt();
         switch(week) {
            case 1:
            case 2:
            case 12:
            System.out.println("冬季");
            break;
            case 3:
            case 4:
            case 5:
            System.out.println("春季");
            break;
            case 6:
            case 7:
            case 8:
            System.out.println("夏季");
            break;
            case 9:
            case 10:
            case 11:
            System.out.println("秋季");
            break;
            default:+
            System.out.println("你输入的什么东西");
            break;
         }

循环结构(for,while,do...while)

循环结构的组成:

初始化语句:用于表示循环开启时的其实状态,简单来说就是循环开始的时候怎么样

条件判断语句:用于表示反复循环的反复执行的条件,简单来说就是判断循环是否能一直执行下去

循环体语句:用于表示循环反复执行的内容,简单来说就是循环反复执行的事情

条件控制语句:用于表示循环执行中每次变化的内容,简单来说就是控制循环是否能执行下去

循环结构对应的语法:

初始化语句:这里可以是一条或者多条语句,这些语句可以完成一些初始化操作

条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体。例如:a<3

循环体语句:这里可以使任意语句,这些语句将反复执行

条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果。常见i++,i- -这样的操作

for循环语句

格式:

foe(初始化语句;条件判断语句;条件控制语句){

循环体语句;

}

执行流程:

(1)执行初始化语句

(2)执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,继续执行

(3)执行循环体语句

(4)执行条件控制语句

(5)回到(2)继续

for(int i=1;i<=5;i++) {
    System.out.println("Hellow world");
}

案例:输出数据

需求:在控制台输出1-5和5-1的数据

分析:

(1)反复进行输出的动作,使用循环结构

(2)从1开始到5结束,设置初始化从1开始

(3)从1开始到5结束,设置判断条件为没有到5的时候继续执行,执行超过5程序结束

(4)从1到5,每次增加1,设置条件控制每次+1

(5)将反复进行的事情写入循环结构的内部,打印对应的数据

for(int i =1;i<=5;i++){
        System.out.println(i);
    }
 for(int i =5;i>=1;i--){
    System.out.println(i);
    }

案例:求和

需求:求1-5的数据和,并把求和结果在控制台输出

分析:

求和的最终结果必须保存起来,需要定义变量,用于保存求和的结果,初始为0

int sun = 0;

从1开始到5结束,使用循环结构完成

for(int i = ii≤5li++){
}

将反复进行的事情写入循环,此处反复进行的事情是将数据i加到用于保存最终求和的变量sum中

for (int i =1; i≤ 5; i++){
sum +=i;
}

当循环执行完毕时,将最终数据打印出来

System.out.printIn("1-5之间的数据和是:"+ sum);

int sum =0;
        for(int i =1;i<=5;i++){
            sum += i;
            /*sum += i; sum = sum + i;
            第一次:sum = sum +i =0 +1 =1;
            第二次:sum = sum +i = 1+2 =3;
            第三次:sum = sum +i = 3 + 3 = 6;
            第四次:sum = sum + i = 6 + 4 = 10;
            第五次:sum = sum + i = 10 + 5 = 15;
             */

        }
        //当数据执行完毕时,将最终结果打印出来
        System.out.println("1-5之间的数据和是:"+ sum);

    }

案例:求偶数和

需求:秋1-100之间的偶数和,并把求和结果在控制台输出

分析:

对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同

对1-100的偶数求和,需要对求和操作添加限制条件

int sum = 0;
for(int i = 1; i≤100; i++){
if(执行的限制条件){
sum +=i;
}
}

限制条件是偶数才参与运算,因此条件应该是判断是否是偶数

int sum = 0;
for(int i = 1;i≤ 100; i++) {
if(i % 2 ==0){
sum +=i;
}
}

当循环执行完毕时,将最终数据打印出来

System.out.printIn("1-100之间的欧式和是:" + sum );

int sum =0;
    for(int i = 1;i<=100;i++){
        if(i%2==0){
            sum += i;
        }
    }
        System.out.println("1-100之间的偶数和是:" + sum);
//输出: 1-100之间的偶数和是:2550

案例:水仙花

需求:在控制台输出所有的"水仙花数"

什么是"水仙花数"?

水仙花数是一个三位数

水仙花数的个位,十位,百位的数字立方和等于原数

分析:

三位数的个位数字如何求

371 1就是原数数字对10进行取余计算的结果 371 % 10 = 1

三位数的百威数字如何求

371 3就是原始数字除以100的结果(整除) 371 / 100 = 3

三位数的十位数字如何求

371 371 除以10,可以将7移动到个位上(整数) 371 / 10 = 37

37通过对10进行取余运算可以得到最后以为的值7                37  %  10 = 7

思考:任意数字的指定位上的数值如何求

    先使用整除操作将要求的数字移动到个位上,再使用取余操作去除最后一位上的值

分析:

输出所有的水仙花必然要使用到循环,遍历所有的三位数,三位数从100开始,到999结束

for(int i = 100; i≤999;i++){ ...... }

不是每个三位数都是水仙花数,因此需要判定,满族条件的数字才进行输出

if(执行的限制条件){ ..... }

判定条件是将三位数中的每一个数值取出来,计算立方和后与原始数字比较是否相等

if( ? + ? + ? == 原数 ) { 输出原数 }

在计算之前获取三位数中每个位上的值

int a = 原数的个位;
int b = 原数的十位;
int c = 原数的百位;
if (aaa + bbb + ccc == 原数){

输出原数

}

综合分析:

先建立循环

取出三位数中的个位十位百位数字

计算是否满足条件,满足条件输出

for(int i =100;i<1000;i++){
        int ge = i%10;
        int shi = i/10%10;
        int bai = i/10/10%10;
        if(ge*ge*ge + shi*shi*shi + bai*bai*bai ==i){
            System.out.println(i);
        }
     }
     //输出:
     //153
     //370
     //371
     //407

案例:统计

需求:统计"水仙花数"一共有多少个,并在控制台输出个数

分析:

定义count , 用于保存"水仙花数"的数量,初始值为0、

int count = 0;

判定水仙花数的过程中,满族条件不再输出,更改为修改count的值,使count+1

if(aaa + bbb + ccc == 原数) {
count++;
}

打印输出最终结果

System.out.printIn("水仙花共有:" +count+ "个");

int count =0;
    for(int i = 100; i<1000;i++){
        int ge = i%10;
        int shi = i/10%10;
        int bai = i/10/10%10;
        if(ge*ge*ge + shi*shi*shi +bai*bai*bai == i){
            count++;
        }
    }
    System.out.println("水仙花共有" + count +"个");
    //输出:水仙花共有4个