day03.流程控制
java
课前回顾:
1.常量:在代码的运行过程中值不会发生改变的数据 -> 字面值
2.变量:在代码的运行过程中值会随着不同的情况发生改变的数据
a.定义:数据类型 变量名 = 值
b.java中的数据类型
基本:byte short int long float double char boolean
引用: 类 数组 接口 枚举 注解 Record
3.运算符:
算数: + - * / %
逻辑: && || ! ^
赋值: = += -= *= /= %=
比较: == > < >= <= !=
三元: boolean表达式?表达式1:表达式2
先走boolean表达式,如果是true,就走?后面的表达式1,否则就走:后面的表达式2
自增自减:++ --
4.数据类型转换:
a.什么时候发生:等号左右两边类型不一致
b.怎么转:
自动转:小转大
强转:大转小
c.按照取值范围从小到到排序:
byte,short,char -> int -> long -> float -> double
今日重点:
除了Scanner都是重点
第一章.键盘录入_Scanner
java
1.概述:java语言提前定义好的类
2.作用:通过键盘录入的形式将数据放到代码中参与运行
3.使用:
a.导包:为了声明我们使用的是哪个包下的对象
import java.util.Scanner;
b.创建对象:
Scanner 对象名 = new Scanner(System.in)
c.调用对象中的功能:
对象名.nextInt() 键盘录入整数
对象名.next() 键盘录入字符串

java
public class Demo01Scanner {
public static void main(String[] args) {
//创建对象
Scanner scanner = new Scanner(System.in);
//调用方法
int data1 = scanner.nextInt();
int data2 = scanner.nextInt();
int sum = data1+data2;
System.out.println("sum = " + sum);
}
}
java
public class Demo02Scanner {
public static void main(String[] args) {
//创建对象
Scanner scanner = new Scanner(System.in);
//调用方法
String data = scanner.next();
System.out.println("data = " + data);
}
}
java对象名.next() 键盘录入字符串 -> 遇到空格或者回车就结束录入 对象名.nextLine() 键盘录入字符串-> 遇到回车就结束录入
javapublic class Demo03Scanner { public static void main(String[] args) { //1.创建Scanner对象 Scanner scanner = new Scanner(System.in); String data1 = scanner.next(); String data2 = scanner.nextLine(); System.out.println(data1); System.out.println(data2); } }
第二章.switch(选择语句)
1.switch 基本使用
java
1.格式:
switch(变量){
case 目标值1:
执行语句1;
break;
case 目标值2:
执行语句2;
break;
case 目标值3:
执行语句3;
break;
...
default:
执行语句n;
break
}
2.执行流程:
用变量代表的值去和下面的case后面的目标值做匹配,配上哪个case,就执行哪个case对应的执行语句;如果以上所有的case都没有匹配上,就走default对应的执行语句n
3.关键字:
break:结束switch语句
4.switch都能匹配什么类型的数据:
byte short int char 枚举类型 String类型
java
public class Demo01Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data = sc.nextInt();
switch (data) {
case 1:
System.out.println("床前明月光");
break;
case 2:
System.out.println("疑是地上霜");
break;
case 3:
System.out.println("举头望明月");
break;
case 4:
System.out.println("低头思故乡");
break;
default:
System.out.println("输入有误");
break;
}
}
}
java
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch (month) {
case 12:
System.out.println("冬季");
break;
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;
default:
System.out.println("输入有误");
break;
}
}
}
2.case 的穿透性
java
1.如果case下面没有break,就会出现case的穿透性,会一直往下穿透执行,直到第一次遇到break或者switch代码运行完毕了才能结束
java
public class Demo03Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch (month) {
case 12:
case 1:
case 2:
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;
}
}
}
3.switch 的新特性
switch 新特性表达式在 Java 12 中作为预览语言出现,在 Java 13 中进行了二次预览,得到了再次改进,最终在 Java 14 中确定下来。另外,在 Java17 中预览了 switch 模式匹配。
传统的 switch 语句在使用中有以下几个问题。
(1)匹配是自上而下的,如果忘记写 break,那么后面的 case 语句不论匹配与否都会执行。
(2)所有的 case 语句共用一个块范围,在不同的 case 语句定义的变量名不能重复。
(3)不能在一个 case 语句中写多个执行结果一致的条件,即每个 case 语句后只能写一个常量值。
(4)整个 switch 语句不能作为表达式返回值。
3.1.Java12 的 switch 表达式
Java 12 对 switch 语句进行了扩展,将其作为增强版的 switch 语句或称为 switch 表达式,可以写出更加简化的代码。
- 允许将多个 case 语句合并到一行,可以简洁、清晰也更加优雅地表达逻辑分支。
- 可以使用-> 代替 :
- ->写法默认省略 break 语句,避免了因少写 break 语句而出错的问题。
- ->写法在标签右侧的代码段可以是表达式、代码块或 throw 语句。
- ->写法在标签右侧的代码块中定义的局部变量,其作用域就限制在代码块中,而不是蔓延到整个 switch 结构。
- 同一个 switch 结构中不能混用“→”和“:”,否则会有编译错误。使用字符“:”,这时 fall-through 规则依然有效,即不能省略原有的 break 语句。":"的写法表示继续使用传统 switch 语法。
案例需求:
请使用 switch-case 结构实现根据月份输出对应季节名称。例如,3 ~ 5 月是春季,6 ~ 8 月是夏季,9 ~ 11 月是秋季,12 ~ 2 月是冬季。
java
public class Demo04Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch (month) {
case 12,1,2:
System.out.println("冬季");
break;
case 3,4,5:
System.out.println("春季");
break;
case 6,7,8:
System.out.println("夏季");
break;
case 9,10,11:
System.out.println("秋季");
break;
default:
System.out.println("输入有误");
break;
}
}
}
不写 break,依然会穿透执行
java
public class Demo05Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch (month) {
case 12,1,2->
System.out.println("冬季");
case 3,4,5->
System.out.println("春季");
case 6,7,8->
System.out.println("夏季");
case 9,10,11->
System.out.println("秋季");
default->
System.out.println("输入有误");
}
}
}
不写 break,不会穿透
3.2.Java13 的 switch 表达式
Java 13 提出了第二个 switch 表达式预览,引入了 yield 语句,用于返回值。这意味着,switch 表达式(返回值)应该使用 yield 语句,switch 语句(不返回值)应该使用 break 语句。
案例需求:判断季节。
java
public class Demo06Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
String season = "";
switch (month) {
case 12, 1, 2 -> season = "冬季";
case 3, 4, 5 -> season = "春季";
case 6, 7, 8 -> season = "夏季";
case 9, 10, 11 -> season = "秋季";
default -> System.out.println("输入有误");
}
System.out.println(season);
}
}
java
public class Demo07Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
String season = switch (month) {
case 12, 1, 2 -> {
yield "冬季";
}
case 3, 4, 5 -> {
yield "春季";
}
case 6, 7, 8 -> {
yield "夏季";
}
case 9, 10, 11 -> {
yield "秋季";
}
default -> {
yield "输入有误";
}
};
System.out.println(season);
}
}
4.针对于变量的新语法_类型推断
java
允许定义变量的时候,不用声明具体的数据类型,可以用var关键字
java
public class Demo08Var {
public static void main(String[] args) {
int i = 10;
var j = 20;
System.out.println(j);
}
}
第三章.分支语句
1.if 的第一种格式
java
1.格式:
if(boolean表达式){
执行语句
}
2.执行流程:
先走boolean表达式,如果是true,就走if后面大括号中的内容,否则就不走
java
public class Demo01If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("两个变量的值相等");
}
boolean flag1 = false;
boolean flag2 = true;
if (flag1=flag2){
System.out.println("flag1的值等于flag2的值");
}
}
}
2.if 的第二种格式
java
1.格式:
if(boolean表达式){
执行语句1
}else{
执行语句2
}
2.执行流程:
a.先走if后面的boolean表达式,如果是true,就走if对应的执行语句1
b.否则就走else后面的执行语句2
java
public class Demo02IfElse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("两个变量的值相等");
}else{
System.out.println("两个变量的值不相等");
}
}
}
2.1 练习
java
任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出该整数是奇数还是偶数
步骤:
1.创建Scanner对象
2.调用nextInt方法,录入一个整数 data
3.判断data是奇数还是偶数
4.输出结果
java
public class Demo03IfElse {
public static void main(String[] args) {
//1.创建Scanner对象
Scanner scanner = new Scanner(System.in);
//2.调用nextInt方法,录入一个整数 data
System.out.println("请您输入一个整数:");
int data = scanner.nextInt();
//3.判断data是奇数还是偶数
//4.输出结果
if (data%2==0){
System.out.println("偶数");
}else{
System.out.println("奇数");
}
}
}
2.2 练习
java
需求.利用if else 求出两个数的较大值
java
public class Demo04IfElse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
int data2 = sc.nextInt();
if (data1>data2){
System.out.println(data1);
}else{
System.out.println(data2);
}
}
}
java
public class Demo05IfElse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
int data2 = sc.nextInt();
int data3 = sc.nextInt();
//定义一个变量记录前两个数的较大值
int temp = 0;
if (data1 > data2) {
temp = data1;
} else {
temp = data2;
}
if (temp>data3){
System.out.println(temp);
}else{
System.out.println(data3);
}
}
}
2.3 练习
java
案例:从键盘输入年份,请输出该年的2月份的总天数。闰年2月份29天,平年28天。
闰年:
a.能被4整除,但是不能被100整除
b.或者能直接被400整除
java
public class Demo06IfElse {
public static void main(String[] args) {
//1.创建Scanner对象
Scanner sc = new Scanner(System.in);
//2.调用nextInt方法录入一个年份
int year = sc.nextInt();
//3.判断是否为闰年
if ((year%4==0 && year%100!=0) || (year%400==0)){
System.out.println("闰年2月29天");
}else{
System.out.println("平年2月有28天");
}
}
}
2.4 练习
java
public class Demo07IfElse {
public static void main(String[] args) {
boolean num1 = false;
boolean num2 = true;
int i = 1;
if (num1 = num2){
i++;
System.out.println(i);
}
if (false){
--i;
System.out.println(i);
}
}
}
3.if 的第三种格式
java
1.格式:
if(boolean表达式){
执行语句1
}else if(boolean表达式){
执行语句2
}else if(boolean表达式){
执行语句3
}else if(boolean表达式){
执行语句4
}else{
执行语句n
}
2.执行流程:
从上到下挨个判断,哪个if条件为true,就走哪个if对应的执行语句
如果以上所有的条件都不满足,就走else对应的执行语句n
java
public class Demo08ElseIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int data1 = sc.nextInt();
int data2 = sc.nextInt();
if (data1>data2){
System.out.println("data1大于data2");
}else if (data1<data2){
System.out.println("data1小于data2");
}else{
System.out.println("data1等于data2");
}
}
}
3.1.练习
java
需求:
键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
输入 1 输出 星期一
输入 2 输出 星期二
输入 3 输出 星期三
输入 4 输出 星期四
输入 5 输出 星期五
输入 6 输出 星期六
输入 7 输出 星期日
输入 其它数字 输出 数字有误
java
public class Demo09ElseIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
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("周日");
}else {
System.out.println("输入有误");
}*/
if (week<1 || week>7){
System.out.println("输入有误");
}else {
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("周日");
}
}
}
}
3.2 练习
java
- 需求: 小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。
- 奖励规则:
95~100 山地自行车一辆
90~94 游乐场玩一次
80~89 变形金刚玩具一个
80以下 胖揍一顿
java
/**
* 95~100 山地自行车一辆
* 90~94 游乐场玩一次
* 80~89 变形金刚玩具一个
* 80以下 胖揍一顿
*/
public class Demo10ElseIf {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if (score >= 95 && score <= 100) {
System.out.println("山地自行车一辆");
} else if (score >= 90 && score <= 94) {
System.out.println("游乐场玩一次");
} else if (score >= 80 && score <= 89) {
System.out.println("变形金刚玩具一个");
} else if (score>=0 && score<80){
System.out.println("胖揍一顿");
}else{
System.out.println("一顿打死");
}
}
}
还可以先判断不合理的分数