1,昨天的回顾
- 键盘录入整数,小数,字符串
- 快捷键:向下复制一行 ctrl + d
public class Test01 {
public static void main(String[] args) {
//1,导包 --- 在idea中不需要手写了。自动生成
//2,创建对象 --- 告诉虚拟机我要用这个类了
Scanner sc = new Scanner(System.in);
//3,真正的接受数据
System.out.println("请输入一个整数");
int number1 = sc.nextInt();
System.out.println("请输入一个小数");
double number2 = sc.nextDouble();
System.out.println("请输入一个字符串");
String str = sc.next();
System.out.println(number1);
System.out.println(number2);
System.out.println(str);
//ctrl + d 向下复制一行
}
}
2,if的第一种格式
格式:
if(关系表达式){
语句体;
}
执行流程:
首先计算关系表达式的值。
如果关系表达式结果是真true。那么执行语句体。
如果关系表达式结果是假false。那么就不执行语句体。
案例:
public class Test02 {
public static void main(String[] args){
//键盘录入女婿的酒量
Scanner sc = new Scanner(System.in);
System.out.println("请录入女婿的酒量");
int number = sc.nextInt();
//对女婿的酒量来进行判断,如果酒量大于两斤,那么老丈人就给出回应
//否则,老丈人不给出回应
if(number > 2){
System.out.println("你可以穿走我的小棉袄");
}
}
}
注意点:
1,在Java中,大括号一般都要写在上一行的末尾。不要单独的另起一行写。
ctrl alt L 格式化代码
//正确的
if(number > 2){
System.out.println("你可以穿走我的小棉袄");
}
//在语法上是没有问题,但是不符合Java的语法习惯
if(number > 2)
{
System.out.println("你可以穿走我的小棉袄");
}
2,以后在对一个布尔类型的变量进行判断时。
boolean flag = false;
//表示对flag变量里面值进行判断,如果为真,就执行大括号里面的语句体。
//如果为假,就不执行大括号里面的语句体。
if(flag){
System.out.println("flag变量的值为true");
}
3,if的第二种格式
格式:
if(关系表达式){
语句体1;
}else{
语句体2;
}
执行流程:
首先计算关系表达式的值。这个结果必须是布尔类型的。
如果计算的结果为真true,就执行语句体1.
如果计算的结果为假false,就执行语句体2.
案例:
public class Test04 {
public static void main(String[] args) {
//看身上的钱。如果超过100块,就吃网红餐厅
//如果小于等于100块,就吃经济实惠的福建料理
int money = 15000;
if(money > 100){
System.out.println("吃网红餐厅");
}else{
System.out.println("吃经济实惠的沙县大酒店");
}
}
}
注意点:
跟三元运算符之间的转换
如果代码比较简单的话,我建议用三元运算符。
如果题目的要求比较复杂,我建议使用if的第二种格式。
结论:
如果if第二种格式中语句体,只有一行代码。此时改写为三元运算符会让代码变得简单。
如果if第二种格式中语句体,代码大于等于两行。此时就不要写三元运算符了。
4,if的第三种格式
格式:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}…
else{
语句体n +1 ;
}
执行过程:
首先,会计算第一个关系表达式。如果为真true,执行里面的语句体。当语句体执行完毕,那么整体执行完毕。
如果第一个关系表达式为假false,继续往下判断,如果所有的关系表达式都为假,那么才执行最后一个else。
简单理解:
从上往下依次判断,只要有一个为真,那么就执行对应的语句体。
如果所有的都为假,那么才执行最后一个else。
案例:
public class Test07 {
public static void main(String[] args) {
//定义 一个变量表示小明的成绩
//合法数据: 0~100 小于0还有大于100的都算是非法数据
int score = 90;
if(score < 0 || score > 100){
System.out.println("当前分数是不合法的");
}else 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{
System.out.println("胖揍一顿");
}
}
}
注意点1:
在这个格式中,如果我们不需要最后一个扫尾,那么else可以省略不写。
//需求:不管小明考多少分,只奖励,不揍了,天天打怪可怜的。
int score = 90;
if(score < 0 || score > 100){
System.out.println("当前分数是不合法的");
}else 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("送变形金刚一个");
}
注意点2:
int number = 10;
if(number == 10){
System.out.println("AAA");
}else if(number == 10){
System.out.println("BBB");
}else if(number == 10){
System.out.println("CCC");
}else if(number == 10){
System.out.println("DDD");
}else if(number == 10){
System.out.println("EEE");
}else{
System.out.println("FFF");
}
//输出结果:AAA
从上往下依次判断,如果遇到满足的,就执行对应的语句体。
当这个语句体执行完毕时候,那么整个整体就全部执行完毕了。
如果所有的判断都不满足,那么才会执行到else
5,小结
if的第一种:适用于单一场景的判断。
if的第二种:适用于两个场景的判断。
if的第三种:适用于多个场景的判断。
如果第一个满足,就执行第一个。
如果第二个满足,就执行第二个。
。。。。
如果都不满足,就执行最后一个elese。
6,switch
格式:
switch(表达式/值/变量){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
。。。
default:
语句体n+1;
break;
}
执行流程:
首先会计算小括号中的结果。
拿着这个结果跟每一个case后面的值匹配。一旦匹配上了,就执行对应的语句体。
如果所有的都没有匹配上,才执行default。
注意点:
-
小括号中结果比如为:byte、short、int、char
JDK5以后可以写枚举(就业班会学习)
JDK7以后可以写字符串
-
case 后面的值不能重复的
-
case 后面的值只能是常量,不能是变量
-
break 表示停止,跳出。结束switch语句。
-
default 跟if里面的else是一样的。
案例:
package com.heima;
import java.util.Scanner;
public class SwitchDemo {
public static void main (String[]args){
//表达式(将要匹配的值)取值为byte int short char JDk5以后枚举,JDK7以后String
Scanner sc= new Scanner(System.in);
String i =sc.next();
switch (i) {
case "sb":
System.out.println("吴骚");
break;
case "ztr":
System.out.println("臧儿");
break;
case "书记":
System.out.println("绿");
break;
case "高豪":
System.out.println("乖乖");
break;
//else一样可省略
default:
}
}
}
public class SwitchDemo {
public static void main(String[] args) {
//键盘录入星期数。
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期数");
int week = sc.nextInt();
//跟录入的数字进行匹配
switch (week){//最终的结果,byte short int char String
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;
}
}
}
package com.heima;
import java.util.Scanner;
public class SwitchDemo01 {
public static void main (String[]args){
System.out.println("请输入星期数");
System.out.println("输入如下所示否则为无效输入星期(一二三四五六日)");
Scanner sc = new Scanner(System.in);
String day =sc.next();
switch (day){
case "周一"://case值为常量,且不能重复
System.out.println("跑步");
break;
case "周二":
System.out.println("游泳");
break;
case"周三":
System.out.println("慢走");
break;
case"周四":
System.out.println("动感单车");
break;
case"周五":
System.out.println("拳击");
break;
case "周六":
System.out.println("爬山");
break;
case"周日":
System.out.println("好好吃一顿");
break;
default:
System.out.println("无效输入");
break;
}
}
}
7,case穿透
概念:
在switch语句中,首先会执行对应case里面的语句体。如果当前case语句体中有break,那么执行完后就会停止。如果当前case的语句体中,没有break。会继续往下执行其他case的语句体。一直执行到break或者右大括号为止。
案例1:
package com.heima;
import java.util.Scanner;
public class SwitchDemo02 {
public static void main(String[]args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份");
int i = sc.nextInt();
switch (i){
case 1://case穿透
case 2:
case 12:
System.out.println("冬天");
break;//终止case穿透
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;
}
}
}
int number = 10;
switch (number){
case 5 :
System.out.println("AAA");
break;
case 10 :
System.out.println("BBB");
break;
case 15 :
System.out.println("CCC");
case 20 :
System.out.println("DDD");
break;
default:
System.out.println("EEE");
break;
}
运行结果: BBB
首先看number为10,就拿着10跟下面所有的case进行匹配。
此时发现,有case10,所以执行case10里面的语句体。打印BBB,打印完毕之后发现break
所以整个swtich停止。
案例2:
int number = 10;
switch (number){
case 5 :
System.out.println("AAA");
break;
case 10 :
System.out.println("BBB");
case 15 :
System.out.println("CCC");
case 20 :
System.out.println("DDD");
default:
System.out.println("EEE");
}
运行结果:BBB CCC DDD EEE
首先还是看number的值,发现为10.
拿着10跟下面所有的case进行匹配。有case10,所以直接运行case10后面的语句体。
当执行完毕之后发现,没有break,所以继续往下穿透。输出DDD。输出完毕之后发现还是没有break
所以继续往下穿透。
所以最终结果为:BBB CCC DDD EEE
案例3:
int number = 30;
switch (number){
default:
System.out.println("EEE");
case 10 :
System.out.println("BBB");
case 5 :
System.out.println("AAA");
case 15 :
System.out.println("CCC");
break;
case 20 :
System.out.println("DDD");
}
运行结果:EEE BBB AAA CCC
首先还是看number的值,发现是30。
然后拿着30去跟下面所有的case进行匹配。发现没有case能匹配上。
所以执行default。而default后面是没有break的。所以往下穿透。
案例4:
int number = 30;
switch (number){
case 10 :
System.out.println("BBB");
case 5 :
System.out.println("AAA");
default:
System.out.println("EEE");
case 15 :
System.out.println("CCC");
break;
case 20 :
System.out.println("DDD");
}
运行结果:EEE CCC
首先还是看number的值,发现是30。
此时会跟下面所有的case进行匹配,发现没有case可以匹配上。
所以执行default。打印EEE,打印完毕之后发现没有break
所以继续往下穿透,打印CCC,打印完毕之后发现,有break,所以结束。
案例5:
public class SwitchDemo7 {
public static void main(String[] args) {
//键盘录入星期
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示星期:1-7");
int week = sc.nextInt();
//对week进行判断
switch (week){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("工作日");
break;
case 6:
case 7:
System.out.println("休息日");
break;
default:
System.out.println("输入的星期有误");
break;
}
}
}
8,switch 跟 if的第三种格式
if:当我们要对一个范围进行判断的时候,只能使用if的第三种格式
switch:当我们要把有限个东西一一列举出来,让你任选其一的时候。
9,两个练习
练习一:
public class Test09 {
public static void main(String[] args) {
/*如果⼩于等于10, 提⽰⼩屁孩,
如果⼤于10, ⼩于等于 20, 提⽰叛逆的青春期
如果⼤于20, ⼩于等于30. 提⽰开始混社会的⼩ 屁孩⼉,
如果⼤于30, ⼩于等于40. 提⽰看老⼤不⼩了
如果⼤于40, ⼩ 于等于50. 提⽰家⾥有个不听话的⼩屁孩⼉.
如果⼤于50, ⼩于等于60. 提⽰⾃⼰⻢上变成不听 话的老屁孩⼉.
如果⼤于60, ⼩于等于70. 提⽰退休了.
如果⼤于70, ⼩于 等于100. 提⽰还能浪几年.
如果⼤于100以上. 提⽰. 拜拜了您呐.*/
//定义一个变量表示年龄
int age = -10;
if (age >= 0 && age <= 10) {
System.out.println("⼩屁孩");
} else if(age > 10 && age <= 20){
System.out.println("叛逆的青春期");
}else if(age > 20 && age <= 30){
System.out.println("开始混社会的⼩ 屁孩⼉");
}else if(age > 30 && age <= 40){
System.out.println("老⼤不⼩了");
}else if(age > 40 && age <= 50){
System.out.println("家⾥有个不听话的⼩屁孩⼉.");
}else if(age > 50 && age <= 60){
System.out.println("⾃⼰⻢上变成不听 话的老屁孩⼉.");
}else if(age > 60 && age <= 70){
System.out.println("退休了");
}else if(age > 70 && age <= 100){
System.out.println("能浪几年");
}else if(age > 100){
System.out.println("拜拜了您呐");
}else{
System.out.println("年龄有误");
}
}
}
练习二:
public class Test10 {
public static void main(String[] args) {
// 定义一个整数类型的变量,赋值为1~100之间的数。
// 键盘录入猜这个数字。
// 如果猜的数字大了,则提示大了。
// 如果猜的数字小了,则提示小了。
// 如果猜中了,则提示恭喜,猜中了。
//1.定义一个变量,赋值1-100
int number = 50;
//2.键盘录入一个数,去猜number变量里面的值是多少?
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数");
int guessNumber = sc.nextInt();//如果键盘录入的数 不在1-100这个范围
// //3.判断
// if(guessNumber < 1 || guessNumber > 100){
// System.out.println("当前输入的数字不在范围当中");
// }else if(guessNumber > number){
// System.out.println("大了");
// }else if(guessNumber < number){
// System.out.println("小了");
// }else{
// System.out.println("猜中了");
// }
if (guessNumber >= 1 && guessNumber <= 100) {
if (guessNumber > number) {
System.out.println("大了");
} else if (guessNumber < number) {
System.out.println("小了");
} else {
System.out.println("猜中了");
}
}else{
System.out.println("当前猜的数字不在范围当中");
}
}
}