JAVA 学习第三天 Scanner&&顺序\选择\循环结构!

  • Post author:
  • Post category:java



今日内容


数据输入

顺序结构

选择结构之if

选择结构之switch


数据输入



1.1 键盘录入的基本使用

问题1:

键盘录入很常用,如果每个程序员自己实现将非常麻烦,所以JDK的开发人员帮助我们实现了获取键盘录入数据的功能,把该功能定义到一个叫做Scanner的类中,同时把这个Scanner类放入java.util包中

问题2:

如何使用jdk中的某个包中的某个类呢?

java中数据类型分为基本类型(四类八种)和引用类型,对于引用类型的使用有固定的三个步骤

然后键盘录入java.util.Scanner类也是一个引用类型,使用也有固定的三个步骤

键盘录入Scanner类的使用:

1.导包(找到要使用的东西) import 引入

格式: import 包名.类名;

Scanner类的导包: import java.util.Scanner;

2.创建对象

格式: 类名 对象名 = new 类名(参数列表…);

解释:

(1)类名: class关键字后面指定的名字

(2)对象名: 就是前面用的变量名,是一个标识符(符合命名规则)

(3)=: 赋值的过程

(4)new: 开辟内存空间创建对象的过程

(5)参数列表: 根据需求指定

创建Scanner类的对象:

Scanner sc = new Scanner(System.in);

注意: ()中的System.in目前是固定写法

3.使用对象:

sc.nextInt(): 获取键盘录入的整数数字(int范围)

sc.nextDouble(): 获取键盘录入的小数数字(double范围)


1.2 键盘录入的理解


在这里插入图片描述


1.3 键盘录入的练习


需求:

获取键盘录入的两个整数(int类型)数字,在控制台输出求和的结果。

实现步骤:

1.导包(找到我们要使用的键盘录入Scanner类): import java.util.Scanner;

2.创建键盘录入Scanner类的对象: Scanner sc = new Scanner(System.in);

3.获取键盘录入的两个整数数字,保存到2个int变量a和b中

4.计算int变量a和b的数据之和,保存到int变量sum中

5.打印sum的值

在这里插入图片描述


流程控制



2.1 流程控制分类


流程:简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程

注意: 在一个流程程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。

流程控制语句分类

1.顺序结构: 按照代码的书写顺序,从上到下依次执行,一条道走到黑

2.选择结构

(1)if语句

(2)switch语句

3.循环结构:

(1)for循环

(2)while循环

(3)do-while循环


2.2 顺序结构


在这里插入图片描述


选择结构-if


英文单词if是: 如果的意思

1.if语句的第一种格式:

if(布尔表达式){


语句体;

}

其它语句;

2.执行流程:

(1)计算布尔表达式的结果,看是true还是false

(2)如果布尔表达式的结果是true,就执行if后面{}中的语句体,接着执行其它语句

(3)如果布尔表达式的结果是false,不执行if后面{}中的语句体,直接执行其它语句

3.注意:

(1)if语句的第一种格式,只适用于有一种情况的场景

(2)if后面()中的表达式,不管多么简单或者多么复杂,结果必须是布尔类型,要么是true,要么是false

(3)if和后面的()之间以及()和{}之间都是没有分号的

(4)if后面的{}中的语句体要么被执行,要么被跳过

(5)if后面的{}中的语句体: 一条/多条语句(根据实际需求确定)

(6)if后面的{}中如果只有一条语句,则可以省略{},但是对于初学者而言,建议保留

在这里插入图片描述


3.2 if语句的第一种格式练习


在这里插入图片描述


3.3 if语句的第二种格式介绍


英文单词if是: 如果的意思

英文单词else是: 否则的意思

1.if语句的第二种格式:

if(布尔表达式){


语句体1;

} else {


语句体2;

}

2.执行流程:

(1)计算布尔表达式的结果,看是true还是false

(2)如果布尔表达式的结果是true,就执行if后面{}中的语句体1,接着执行其它语句

(3)如果布尔表达式的结果是false,就执行else后面{}中的语句体2,直接执行其它语句

3.注意(不要死记硬背,多看看):

(1)if语句的第二种格式,只适用于有两种情况的场景,是一个二选一的情况

(2)if后面()中的表达式,不管多么简单或者多么复杂,结果必须是布尔类型,要么是true,要么是false

(3)if和后面的()之间以及()和{}之间以及else和前后的{}都是没有分号的

(4)语句体1和语句体2必须只有一个会被执行,属于二选一的情况

(5)if和else后面的{}中的语句体: 一条/多条语句(根据实际需求确定)

(6)if和else后面的{}中如果只有一条语句,则可以省略{},但是对于初学者而言,建议保留

在这里插入图片描述


3.4 if语句的第二种格式练习判断大小


需求:

判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b

实现步骤:

1.定义2个int变量a和b,并初始化

2.使用if语句第二种格式判断a和b的大小

2.1 如果a>b 输出 “a的值大于b”

2.2 否则,输出 “a的值不大于b”

在这里插入图片描述


3.5 if语句的第二种格式练习判断奇偶数


需求:

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

注意:

判断int变量num中的数字的奇偶性

偶数: num%2 == 0

奇数: num%2 != 0

实现步骤:

1.创建键盘录入Scanner类的对象(1.导包: 根据提示自动导包 2.创建对象)

2.获取键盘录入的一个整数数字,保存到int变量num中

3.使用if语句的第二种判断判断num中的数字的奇偶性,并输出对应的结果

在这里插入图片描述


3.6 if语句的第三种格式介绍


英文单词if是: 如果的意思

英文单词else是: 否则的意思

1.if语句的第三种格式:

if(布尔表达式1){


语句体1;

} else if(布尔表达式2){


语句体2;

}



else if(布尔表达式n){


语句体n;

} else {


语句体n+1;

}

其它语句;

2.执行流程:

(1) 首先计算布尔表达式1的值,判断其结果是true还是false

(2) 如果是true就执行语句体1

(3) 如果是false就继续计算布尔表达式2,判断其结果是true还是false

(4) 如果是true就执行语句体2

(5) 如果是false就继续计算布尔表达式…,判断其结果是true还是false

(6) …

(7) 如果没有任何布尔表达式为true,就执行语句体n+1

3.注意:

(1)if语句的第三种格式,只适用于有多种(两种以上)情况的场景,是一个多选一的情况

(2)if后面()中的表达式,不管多么简单或者多么复杂,结果必须是布尔类型,要么是true,要么是false

(3)if和后面的()之间以及()和{}之间以及else和前后的{}都是没有分号的

(4)语句体1到语句体n+1必须只有一个会被执行,属于多选一的情况

(5)if和else后面的{}中的语句体: 一条/多条语句(根据实际需求确定)

(6)if和else后面的{}中如果只有一条语句,则可以省略{},但是对于初学者而言,建议保留

(7)最后一个else后面是没有条件的,是用来兜底的,如果前面的所有条件都不成立,执行最后一个else中的代码

(8)不能直接在else后面写条件,只能在if后面()中写条件

有if就可以写条件,没有if就不能写条件

在这里插入图片描述


3.7 if语句的第三种格式练习根据数字输出对应的星期


需求:

键盘录入一个星期数(1,2,…7),输出对应的星期一,星期二,…星期日

演示效果:

输入 1 输出 星期一

输入 2 输出 星期二

输入 3 输出 星期三

输入 4 输出 星期四

输入 5 输出 星期五

输入 6 输出 星期六

输入 7 输出 星期日

输入 其它数字 输出 数字有误

实现步骤:

1.创建键盘录入Scanner类的对象

2.获取键盘录入的代表星期数的1到7之间的整数数字,保存到int变量week中

3.因为week中的数字有7+1种情况,使用if语句第三种格式判断week的值,输出对应的星期几

在这里插入图片描述


选择结构-switch



4.1 switch语句格式和介绍


1.switch语句的格式:

switch(表达式) {


case 常量值1:

语句体1;

break;

case 常量值2:

语句体2;

break;



case 常量值n:

语句体n;

break;

default:

语句体n+1;

break;

}

其它语句;

2.执行流程:

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

(2)其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结

束。

(3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

3.注意事项:

(1)switch语句()中表达式的类型: byte/short/char/int String/枚举 —最重要的—

(2)case后面必须写常量,而且不能重复,常量的类型要和表达式的结果类型匹配

(3)switch和后面的(),以及()和{}之间都没有分号,case后面常量值的后面是冒号不是分号

(4)break是用来结束switch语句的,一旦遇到break,直接结束switch语句,继续执行switch后面的其它语句

(5)default是用来兜底的,如果所有的case的常量值和表达式的结果都不相同,直接执行default中的代码

(6)如果每个case和default后面都有break,那么case和default的顺序可以任意调整,不影响结果

(7)如果default放在最后的话,那么可以省略default中的break

(8)语句体: 一条/多条语句(根据题目需求确定)

在这里插入图片描述


4.2 switch练习根据月份输出对应的季节


需求:

一年有12个月,分属于春夏秋冬4个季节,

键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。

演示效果

输入: 1、2、12 输出:冬季

输入: 3、4、5 输出:春季

输入: 6、7、8 输出:夏季

输入: 9、10、11 输出:秋季

输入: 其它数字 输出:数字有误

实现步骤(本案例使用switch):

1.创建键盘录入Scanner类对象

2.获取键盘录入的代表月份的1到12之间的整数数字,保存到int变量month中

3.使用switch语句,根据month中的不同的月份数字,输出对应的季节

public class Demo02SwitchMonth {


public static void main(String[] args) {


//1.创建键盘录入Scanner类对象

Scanner sc = new Scanner(System.in);

    //2.获取键盘录入的代表月份的1到12之间的整数数字,保存到int变量month中
    System.out.println("请输入代表月份的1到12之间的整数数字: ");
    int month = sc.nextInt();

    //3.使用switch语句,根据month中的不同的月份数字,输出对应的季节
    switch (month) {
        case 1:
            System.out.println("冬季");
            break;
        case 2:
            System.out.println("冬季");
            break;
        case 12:
            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;
        default:
            System.out.println("您输入的月份不存在...");
            break;
    }
    System.out.println("其它语句...");
}

}


4.3 使用case穿透优化根据月份输出对应的季节的案例


使用case穿透优化根据月份输出对应的季节的案例

发现问题:

前面Demo02SwitchMonth.java文件中出现了大量的重复的代码

1,2,12代码重复,3,4,5代码重复,6,7,8代码重复,9,10,11代码重复

每三个case中的代码都是相同的

解决方案使用case穿透:

如果多个连续的case,每个case后面都有相同的语句体和break,那么只需要保留最后一个case以及内部的语句体和break,前面的若干个case,不需要写语句体和break了,只保留case就可以了

case穿透执行步骤:

在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。

总结:

(1)计算switch后面表达式的结果

(2)找到case入口: 常量值和表达式结果相同的那个case,执行这个case中的代码

(3)如果当前case中没有break,直接穿透进入下一个case中的代码来执行

(4)…

(5)直到遇到break,或者整体switch结束。

在这里插入图片描述


循环结构



5.1 循环概述


循环的概念: 重复性的执行某些固定的功能,当条件不成立时,结束循环

说白了: 条件成立执行操作,条件不成立停止操作


5.2 循环组成


1.循环的组成(手写100遍HelloWorld案例):

(1)【初始化表达式1】准备工作:笔墨伺候,最优先唯一执行一次的操作

(2)【循环条件2】条件判断:每次书写前,判断一下,要不要写

(3)【循环体3】循环所要进行的操作:手写一个HelloWorld案例

(4)【步进表达式4】扫尾的工作:每写一次HelloWorld,计数(+1)

2.执行流程:

1,2(true),3,4 –> 2(true),3,4 –> … –> 2(false),结束循环

3.循环的分类:

(1)for循环

(2)while循环

(3)do-while循环


循环语句1–for


**6.1

for循环语句介绍


1.for循环格式:

for (初始化表达式1;布尔表达式2;步进表达式4) {


循环体3;

}

其它语句;

2.执行流程:

1,2(循环条件:true),3,4 –> 2(循环条件:true),3,4 –> … –> 直到2(循环条件:false)为false时,结束for循环,执行后面的其它语句

3.注意:

(1)for和(),以及()和{}之间是没有分号的

(2)()中有3个表达式,之间用2个分号(缺一不可)隔开,第三个表达式后面没有分号

(3)第二个表达式一定是布尔类型,结果只能是true和false

(4)循环体就是一条/多条语句

4.总结

对于求和,计数的需求,解决方案:

(1)循环的前面定义求和/计数变量

(2)循环的内部完成求和/计数功能的实现

(3)循环的后面打印求和/计数变量的结果数据
在这里插入图片描述


6.2 for循环练习1


在这里插入图片描述


6.3 for循环练习2


需求:

在控制台输出所有的“水仙花数”及总个数

解释:什么是水仙花数?

水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数

例如 153 3

3

3 + 5

5

5 + 1

1

1 = 27 + 125 + 1 = 153

实现步骤:

0.定义int变量count,初始值0,用来统计水仙花数字的个数

1.使用for循环获取所有的三位数字,循环变量int类型num

1.1 计算num中数字的个位,十位,百位,分别保存到int变量ge,shi,bai中

1.2 计算个位,十位,百位的立方和,保存到int变量sum中

1.3 判断如果num等于sum,说明是水仙花数字

1.4 计数器count的值增加1

1.5 打印num中的水仙花数字

2.for循环结束,打印count的值

在这里插入图片描述


循环语句2–while



7.1 while循环语句介绍


1.while循环格式:

初始化表达式1;

while(布尔表达式2){


循环体3;

步进表达式4;

}

其它语句;

2.执行流程:

1,2(循环条件:true),3,4–>2(循环条件:true),3,4–> … –>直到布尔表达式2(循环条件: false) 的结果为false,结束while循环,执行后面的其它语句

3.注意:

(1)while和(),以及()和{}之间是没有分号的

(2)()中的表达式必须是布尔类型

(3)循环体就是一条/多条语句

在这里插入图片描述


7.2 while循环练习1


需求:

在控制台输出5次HelloWorld

在这里插入图片描述


7.3 while循环练习2


需求:

世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。

请问,我折叠多少次,可以折成珠穆朗玛峰的高度?

折纸(折叠后的厚度是原有厚度的2倍,而不是平方的关系):

原来: 0.1 paper

第一次: 0.1

2: 0.2 paper = paper * 2

第二次: 0.2

2: 0.4

第三次: 0.4

2: 0.8

第四次: 0.8

2: 1.6

实现步骤:

1.定义int变量count,初始值0,用来统计折叠纸张的次数

2.定义2个double变量paper和zf,分别代表珠峰的高度和纸张的厚度,根据题目需求进行初始化

3.使用while循环统计折叠纸张的次数

3.1 初始化表达式: 步骤1和2中定义的变量

3.2 循环条件: 纸张的总厚度 小于 珠峰的高度 paper<zf

3.3 循环体: 计数器的值增加1

3.4 步进表达式: 折叠一次纸张 paper = paper * 2

4.while循环结束后,打印count的值

在这里插入图片描述


循环语句3–do-while



8.1 do-while循环语句介绍


1.do-while循环格式:

初始化表达式1;

do {


循环体3;

步进表达式4;

} while (布尔表达式2);

其它语句;

2.执行流程:

1,3,4 –> 2(循环条件:true),3,4 –> 2(循环条件:true),3,4 –>

直到布尔表达式2(循环条件:false)的结果为false,结束do-while循环,执行后面的其它语句

3.注意:

(1)do和{},{}和while,以及while后()之间都是没有分号的

(2)()中的表达式必须是布尔类型,而且()后面必须写一个分号,不写是语法格式错误

(3)循环体就是一条/多条语句

(4)代码从上到下依次执行,它是先执行循环体,再进行条件判断,所以对于do-while而言,循环体至少执行一次

在这里插入图片描述


do-while循环练习


在这里插入图片描述



版权声明:本文为weixin_50537480原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。