二、复习2

本文介绍了Java中的逻辑运算符,包括与(&&)、或(|)、异或(^)和非(!)的用法及应用场景。通过实例展示了短路逻辑运算符(&&和||)的特点。此外,讲解了if语句的三种格式,以及switch语句的结构和使用。最后,探讨了for循环的结构和在求和、判断条件等场景的应用。
摘要由CSDN通过智能技术生成

第一章 运算符

1.1 逻辑运算符

1.1.1 而且和或者

分类:

​ & 逻辑与,建议读作并且、而且。

​ 表示需要同时满足左边和右边才可以。

​ | 逻辑或,建议读作或者。

​ 表示两边的条件只要满足其中一个就可以了。

代码示例:

//& 而且
//规则:两边都为真,结果才是真。只要有一个为假,结果就是假
System.out.println(true & true);//true
System.out.println(false & true);//false
System.out.println(true & false);//false
System.out.println(false & false);//false

// |  或者
//规则:两边都为假,结果才是假,只要有一个为真,结果就是真
System.out.println(true | true);//true
System.out.println(false | true);//true
System.out.println(true | false);//true
System.out.println(false | false);//false
应用场景一:

​ 用户在登录的时候,需要用户名和密码这两个同时输入正确了,那么才是可以的。

​ 此时就是两个条件同时满足,用并且。

应用场景二:

​ 丈母娘跟女婿提要求:需要有房子,或者有车子就可以穿走我的小棉袄。

​ 此时就是两个条件中只要满足其中一个即可,用或者

1.1.2 异或

这个知识点不重要,后面几乎用不到,所以我们只要了解

运算规则:

​ 相同为false,不同为true

代码示例:

System.out.println(true ^ true);//false
System.out.println(false ^ true);//true
System.out.println(true ^ false);//true
System.out.println(false ^ false);//false
1.1.3 非/取反

运算规则:

​ 改变true和false的结果。

​ 如果是true,取反之后变成false

​ 如果是false,取反之后变成true

代码示例:

System.out.println(true);//true
System.out.println(!true);//false
System.out.println(!false);//true

建议:

​ 最多只能用一次。用多了没有任何意义。

代码示例:

System.out.println(!!true);

1.2 短路逻辑运算符

分类:

​ && 短路且、短路与

​ || 短路或

特点:

​ 只要左边能确定表达式最终的结果,那么右边不会参与计算。

&&:

​ 左边为true,那么右边会参与计算。

​ 左边为false,那么右边不会参与计算。

||:

​ 左边为true,那么右边不会参与计算。

​ 左边为false,那么右边会参与计算。

常用的逻辑运算符:

​ && || !

练习:

需求:

​ 数字6是一个真正伟大的数字,键盘录入两个整数。

​ 如果其中一个为 6,最终结果输出true。

​ 如果它们的和为 6的倍数。

​ 最终结果输出true。

​ 其他情况都是false。

代码示例:

//1.键盘录入两个整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int a = sc.nextInt();
System.out.println("请输入第二个整数");
int b = sc.nextInt();
//2.a==6 || b==6 || (a + b) % 6 == 0
//三个条件选一个
boolean result = (a == 6) || (b == 6) || ((a + b) % 6 == 0);
System.out.println(result);

1.3 三元运算符

三元运算符又叫三元表达式,还有其他名字:问号冒号表达式,三目运算符。

格式:

​ 关系表达式 ? 表达式1 : 表达式2 ;

注意点:

​ 三元运算符的结果一定要被使用,可以赋值给一个变量,或者直接打印输出。

执行流程:

​ 先执行关系表达式。

​ 如果结果为真,执行表达式1,此时表达式1的结果就是整个三元运算符的结果。

​ 如果结果为假,执行表达式2,此时表达式2的结果就是整个三元运算符的结果。

代码示例:

int a = 10;
int b = 20;
//利用三元表达式求a和b之间的较大值
int max = a > b ? a : b ;
System.out.println(max);


System.out.println(a > b ? a : b);

1.4 练习 - 两只老虎

需求:

​ 动物园里有两只老虎,体重分别为通过键盘录入获得,请用程序实现判断两只老虎的体重是否相同。

代码示例:

//分析:
//1,键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请录入第一只老虎的体重");
int weight1 = sc.nextInt();
System.out.println("请录入第二只老虎的体重");
int weight2 = sc.nextInt();
//2.比较
// String result = 体重1 == 体重2 ? "相同"  : "不相同";
String result = weight1 == weight2 ? "相同" : "不相同";
System.out.println(result);

1.5 练习-求三个值的较大值

需求:

​ 一座寺庙里住着三个和尚,已知他们的身高分别为150cm、210cm、165cm,请用程序实现获取这三个和尚的最高身高。

代码示例:

//1.定义三个变量记录和尚的身高
int height1 = 150;
int height2 = 165;
int height3 = 210;
//2.求出任意两个数字的较大值
int temp = height1 > height2 ? height1 : height2;
//3.再拿着这个较大值跟第三个数进行比较,求出三个数字的最大值
int max = temp > height3 ? temp : height3;
System.out.println(max);

1.6 运算符的优先级

小括号优先于所有。

想要让谁先运行,就把谁给括起来就可以了。

第二章 流程控制语句

在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。

2.1 流程控制语句分类

​ 顺序结构

​ 分支结构(if, switch)

​ 循环结构(for, while, do…while)

2.2 顺序结构

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

顺序结构执行流程图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6ADHNFDo-1652327968112)(img/1545615769372.png)]

2.3 分支结构:if语句

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

执行流程:

①首先计算关系表达式的值

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

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

④继续执行后面的语句内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-15BQlkEj-1652327968115)(img/1545616039363.png)]

示例:

public class IfDemo {
	public static void main(String[] args) {
		System.out.println("开始");	
		//定义两个变量
		int a = 10;
		int b = 20;	
		//需求:判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
		if(a == b) {
			System.out.println("a等于b");
		}		
		//需求:判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
		int c = 10;
		if(a == c) {
			System.out.println("a等于c");
		}		
		System.out.println("结束");
	}
}
练习1:老丈人选女婿

需求:

​ 键盘录入女婿的酒量,如果大于2斤,老丈人给出回应,否则没有任何回应

代码示例:

//分析:
//1.键盘录入女婿的酒量
Scanner sc = new Scanner(System.in);
System.out.println("请输入女婿的酒量");
int wine = sc.nextInt();//5
//2.对酒量进行一个判断即可
if(wine > 2) {
    System.out.println("不错哟,小伙子!");
}
练习2:考试奖励

需求:

​ 键盘录入一个整数,表示小明的考试名次,如果名次为1,小红可以当小明的女朋有了。

代码示例:

//分析:
//1.键盘录入一个整数,表示小明的考试名次
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的名次");
int rank = sc.nextInt();
//2.对小明的考试成绩进行判断即可
if(rank == 1){
    System.out.println("小红成为了小明的女朋友");
}
第一种格式的细节:
  1. 如果我们要对一个布尔类型的变量进行判断,不要写==,直接把变量写在小括号中即可。

  2. 如果大括号中的语句体只有一条,那么大括号可以省略不写

    如果大括号省略了,那么if只能控制距离他最近的那一条语句。

    **建议:**自己不要去写,如果别人这么写了,你要能看懂即可。

练习3:无人汽车自动驾驶

代码示例:

无人汽车自动驾驶,每一次遇到红绿灯的时候都会进行判断,根据不同的情况执行不同的代码。
boolean isLightGreen = false;
boolean isLightYellow = false; 
boolean isLightRed = true; 

if (isLightGreen){
   System.out.println("gogogo!");
}

if (isLightYellow){
   System.out.println("slow!");
}

if (isLightRed){
   System.out.println("stop!");
}

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

执行流程:

①首先计算关系表达式的值

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

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

④继续执行后面的语句内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KdqpcJ5u-1652327968117)(img/1545616221283.png)]

示例:

public class IfDemo02 {
	public static void main(String[] args) {
		System.out.println("开始");		
		//定义两个变量
		int a = 10;
		int b = 20;
		//需求:判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
		if(a > b) {
			System.out.println("a的值大于b");
		} else {
			System.out.println("a的值不大于b");
		}		
		System.out.println("结束");
	}
}
练习1:吃饭

需求:

​ 键盘录入一个整数,表示身上的钱。

​ 如果大于等于100块,就是网红餐厅。

​ 否则,就吃经济实惠的沙县小吃。

代码示例:

//分析:
//1.键盘录入一个整数。表示身上的钱。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示身上的钱");
int money = sc.nextInt();
//2.对钱进行判断
if(money >= 100){
    System.out.println("吃网红餐厅");
}else{
    System.out.println("福建大酒店");
}
练习2:影院选座

需求:

​ 在实际开发中,电影院选座也会使用到if判断。

​ 假设某影院售卖了100张票,票的序号为1~100。

​ 其中奇数票号坐左侧,偶数票号坐右侧。

​ 键盘录入一个整数表示电影票的票号。

​ 根据不同情况,给出不同的提示:

​ 如果票号为奇数,那么打印坐左边。

​ 如果票号为偶数,那么打印坐右边。

代码示例:

//分析:
//1.键盘录入票号
Scanner sc = new Scanner(System.in);
System.out.println("请输入票号");
int ticket = sc.nextInt();
if(ticket >= 1 && ticket <= 100){
    //合法
    //2.对票号进行判断
    if (ticket % 2 == 0) {
        //偶数
        System.out.println("坐右边");
    } else {
        //奇数
        System.out.println("坐左边");
    }
}else{
    //票号不合法
    System.out.println("票号不合法");
}
if语句格式3
格式:
if (关系表达式1) {
    语句体1;	
} else if (关系表达式2) {
    语句体2;	
}else {
    语句体n+1;
}

执行流程:

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

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

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

④…

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlwuoXRo-1652327968117)(img/1545616667104.png)]

练习1:考试奖励

需求:

​ 小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送他不同的礼物,

假如你可以控制小明的得分,请用程序实现小明到底该获得什么样的礼物,并在控制台输出。

分析:

​ ①小明的考试成绩未知,可以使用键盘录入的方式获取值

​ ②由于奖励种类较多,属于多种判断,采用if…else…if格式实现

​ ③为每种判断设置对应的条件

​ ④为每种判断设置对应的奖励

代码示例:

//95~100 自行车一辆
//90~94   游乐场玩一天
//80 ~ 89 变形金刚一个
//80 以下  胖揍一顿

//1.键盘录入一个值表示小明的分数
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的成绩");
int score = sc.nextInt();
//2.对分数的有效性进行判断
if(score >= 0 && score <= 100){
    //有效的分数
    //3.对小明的分数进行判断,不同情况执行不同的代码
    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("胖揍一顿");
    }
}else{
    //无效的分数
    System.out.println("分数不合法");
}
练习2:商品的价格

​ 在实际开发中,多种情况判断时,会用到if的第三种格式:

需求:

​ 商场都会有VIP的会员制,根据不同的会员会有不同的折扣。

​ 假设商品总价为1000。

​ 键盘录入会员级别,并计算出实际支付的钱。

​ 会员1级:打9折。

​ 会员2级:打8折。

​ 会员3级:打7折。

​ 非会员:不打折,要打也是打骨折。

代码示例:

//1.定义变量记录商品的价格
int price = 1000;
//2.键盘录入是否为会员(0为会员 1 为非会员 其他数字也认为是非会员)
Scanner sc = new Scanner(System.in);
System.out.println("请输入是否为会员 0为会员 1 为非会员");
int type = sc.nextInt();
if(type == 0){
    //代码执行到这里表示是会员,输入会员级别
    System.out.println("请输入会员级别");
    int vip = sc.nextInt();
    System.out.println("当前会员级别为:" + vip + "级");
    //3.根据不同的会员级别计算商品的价格
    if(vip == 1){
        System.out.println("实际支付" + (price * 0.9));
    }else if(vip == 2){
        System.out.println("实际支付" + (price * 0.8));
    }else if(vip == 3){
        System.out.println("实际支付" + (price * 0.7));
    }else{
        //当输入会员级别不是1,2,3的时候会执行到这里
        System.out.println("没有当前的会员级别");
    }
}else{
    //非会员,商品不打折
    //商品的价格不会发生任何的变化
    System.out.println("当前不是会员");
    System.out.println("实际支付" + price);
}
练习3:自动驾驶

代码示例:

无人汽车自动驾驶,每一次遇到红绿灯的时候都会进行判断,根据不同的情况执行不同的代码。
boolean isLightGreen = false;
boolean isLightYellow = false; 
boolean isLightRed = true; 

//形成一个整体之后,如果第一个判断为真,下面的判断就不会执行了
//提高了代码的运行效率
if (isLightGreen){
   System.out.println("gogogo!");
}else if (isLightYellow){
   System.out.println("slow!");
}else if (isLightRed){
   System.out.println("stop!");
}

2.4 分支结构:switch语句

switch语句结构(掌握)
  • 格式

    switch (表达式) {
    	case 1:
    		语句体1;
    		break;
    	case 2:
    		语句体2;
    		break;
    	...
    	default:
    		语句体n+1;
    		break;
    }
    
  • 执行流程:

    • 首先计算出表达式的值
    • 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结 束。
    • 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
switch语句练习-春夏秋冬
  • 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
  • 运行结果:
春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12
  • 示例代码:
public class Demo1 {
    public static void main(String[] args) {
        //键盘录入月份数据,使用变量接收
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个月份:");
        int month = sc.nextInt();
        //case穿透
        switch(month) {
            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("你输入的月份有误");
        }
    }
}
  • 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。
switch的扩展知识:
  • default的位置和省略情况

    default可以放在任意位置,也可以省略

  • case穿透

  • switch在JDK12的新特性

int number = 10;
switch (number) {
    case 1 -> System.out.println("一");
    case 2 -> System.out.println("二");
    case 3 -> System.out.println("三");
    default -> System.out.println("其他");
}
  • switch和if第三种格式各自的使用场景

当我们需要对一个范围进行判断的时候,用if的第三种格式

当我们把有限个数据列举出来,选择其中一个执行的时候,用switch语句

比如:

​ 小明的考试成绩,如果用switch,那么需要写100个case,太麻烦了,所以用if简单。

​ 如果是星期,月份,客服电话中0~9的功能选择就可以用switch

练习1:休息日和工作日

需求:键盘录入星期数,输出工作日、休息日。

(1-5) 工作日,(6-7)休息日。

代码示例:

//分析:
//1.键盘录入星期数
Scanner sc = new Scanner(System.in);
System.out.println("请输入星期");
int week = sc.nextInt();//3
//2.利用switch进行匹配
----------------------------------------------------
利用case穿透简化代码
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;
}
----------------------------------------------------
同时匹配多个值
switch (week){
    case 1,2,3,4,5:
        System.out.println("工作日");
        break;
    case 6,7:
        System.out.println("休息日");
        break;
    default:
        System.out.println("没有这个星期");
        break;
}
----------------------------------------------------
利用JDK12简化代码书写
switch (week) {
    case 1, 2, 3, 4, 5 -> System.out.println("工作日");
    case 6, 7 -> System.out.println("休息日");
    default -> System.out.println("没有这个星期");
}

2.5 循环结构:for循环

for循环结构(掌握)
  • 循环:

    循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。

  • for循环格式:

for (初始化语句;条件判断语句;条件控制语句) {
	循环体语句;
}
  • 格式解释:

    • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
    • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
    • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
    • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
  • 执行流程:

    ①执行初始化语句

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

    ​ 如果是false,循环结束

    ​ 如果是true,继续执行

    ③执行循环体语句

    ④执行条件控制语句

    ⑤回到②继续

for循环书写技巧:
  • 确定循环的开始条件
  • 确定循环的结束条件
  • 确定循环要重复执行的代码

代码示例:

//1.确定循环的开始条件
//2.确定循环的结束条件
//3.确定要重复执行的代码

//需求:打印5次HelloWorld
//开始条件:1
//结束条件:5
//重复代码:打印语句

for (int i = 1; i <= 5; i++) {
    System.out.println("HelloWorld");
}
for循环练习-输出数据
  • 需求:在控制台输出1-5和5-1的数据
  • 示例代码:
public class ForTest01 {
    public static void main(String[] args) {
		//需求:输出数据1-5
        for(int i=1; i<=5; i++) {
			System.out.println(i);
		}
		System.out.println("--------");
		//需求:输出数据5-1
		for(int i=5; i>=1; i--) {
			System.out.println(i);
		}
    }
}
for循环练习-求和
  • 需求:求1-5之间的数据和,并把求和结果在控制台输出
  • 示例代码:
public class ForTest02 {
    public static void main(String[] args) {
		//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
		int sum = 0;
		//从1开始到5结束的数据,使用循环结构完成
		for(int i=1; i<=5; i++) {
			//将反复进行的事情写入循环结构内部
             // 此处反复进行的事情是将数据 i 加到用于保存最终求和的变量 sum 中
			sum = 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);
    }
}
  • 本题要点:
    • 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量
    • 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的
for循环练习-求偶数和
  • 需求:求1-100之间的偶数和,并把求和结果在控制台输出 }
  • 示例代码:
public class ForTest03 {
    public static void main(String[] args) {
		//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
		int sum = 0;
		//对1-100的数据求和与1-5的数据求和几乎完全一样,仅仅是结束条件不同
		for(int i=1; i<=100; i++) {
			//对1-100的偶数求和,需要对求和操作添加限制条件,判断是否是偶数
			if(i%2 == 0) {
                //sum += i;
				sum = sum + i;
			}
		}
		//当循环执行完毕时,将最终数据打印出来
		System.out.println("1-100之间的偶数和是:" + sum);
    }
}
for循环练习-统计次数

需求:

​ 键盘录入两个数字,表示一个范围。

​ 统计这个范围中。

​ 既能被3整除,又能被5整除数字有多少个?

代码示例:

//1.键盘录入两个数字,表示一个范围。
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int number1 = sc.nextInt();
System.out.println("请输入第二个整数");
int number2 = sc.nextInt();
//2.比较number1和number2找到最大值和最小值
int max = number1 > number2 ? number1 : number2;
int min = number1 < number2 ? number1 : number2;
int count = 0;
//3.循环得到这个范围之内的每一个数字
//拿着每一个数字去跟3和5进行整除,如果满足规则,表示找到了一个
for (int i = min; i <= max; i++) {
    //i 依次表示min~max这个范围之内的每一个数字
    if(i % 3 == 0 && i % 5 == 0){
        count++;
    }
}
//当循环结束之后,就表示这个范围内所有的数字都找完了
System.out.println(count);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值