JavaBase02-运算符、分支

本文详细解析了算术、关系、逻辑运算符,并指导如何运用位运算、赋值和条件运算。深入讲解if-else与switch语句选择,以及运算符优先级。实例演示判断电话号码、日期天数和数独规律问题的编程解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运算符

算术运算符

需要两个操作数参与,如果由浮点数参与运算,结果为浮点型。

符号作用说明
+如果两个操作数都是数值型的数据,+用于计算。如果两个操作数有一端是字符串,+用于拼接字符串。
-只能用于数值型数据。
*只能用于数值型数据。
/只能用于数值型数据。如果两个整数相除,结果只保留整数部分(商)。
%只能用于数值型数据。商一定是整数。

注意

  • 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减
  • 运算时最终结果的数据类型,以所以参与运算的操作数中所占字节最大的类型为准

关系运算符

需要两个操作数参与

符号作业
>大于
<小于
>=大于等于
<=小于等于
!=不等于
==等于

注意

  • ==用于判断相等,=用于赋值

  • ==用于比较两个原始类型的值或引用类型的内存地址

  • 关系运算的结果为true/false

逻辑运算符

符号作业说明
&&and与符号两端需要两个表达式,判断如果都为true,整体结果则为true,如果有一段姐夫哦为false整体结果为false。
||or或符号垄断需要两个表达式,判断如果都为false,整体结果则为false,如果有一端结果为true,整体结果为true。
not非是一个弹幕运算符,只有一个表达式参与运算。“!表达式”不是对原表达式的结果取相反值。

补充:位运算符

符号作业
&按位与。计算的结果与&&相同,但过程不同。符号两端的表示都会执行判断。
|按位或。计算的结果与||相同,但过程不同。符号两端的不是都会执行判断。
^按位异或。将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为十进制。
>>按位右移。将第一个操作数转换为二进制后,向右移第二个这才是对于的位数,再将结果装换位十进制。
<<按位左移。

注意

  • &&和||也称为短路运算。如果能通过第一个表达式觉得最终的结果,则不用判断第二个表达式。
  • 通常情况下,使用&&和||提高代码执行效率。

赋值和复合赋值运算符

符号作用
=赋值运算符。将符号右侧的内容赋值给符号左侧的变量。
+=复合赋值运算符。i+=3;相当于i=i+3;
-=i-=1; ==
*=
/=
%=

注意

复合赋值运算的流程是:

将符号两端的整体进行对应的算数运算后,将结果赋值给符号左侧的变量中。

自增自减运算符

只有一个操作数参与运算,称为单目运算符

符号作用
++将结果加一
将结果减一

注意

  • a++或++a相当于a+=1或a=a+1。–同理
  • 如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1
  • 如果++或–不是单独成行
    • 符号再去,先+1或-1计算后在使用值
    • 符号灾后,先使用值后在+1或–1计算

条件运算符

三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。

表达式1?表达式2:表达式3

首先运算表达式1,如果结果为true,执行问号后的表达式2; 如果结果为false,执行冒号后的表达式3。 整个表达式的最终结果为表达式2或表达3。

三位一体,运算后的值为其中范围最大的值

((x>4) ? 99.9 :9)
其结果为:9.0

运算符的优先级

小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>条件运算符>>赋值/复合赋值运算符

多种数据类型参与运算,其结果以字节最大的为准。

条件语句

if语句

  • 单分支if语句

如果一件事情满足则执行

if(判断条件){//布尔值条件
	执行代码
}
  • 双分支
if(){

}else{

}
  • 多分支
if(){

}else if(){

}else if(){

}else{

}
  • if嵌套
if(){
	if(){
	
	}
}

if嵌套不要嵌套太多层,会导致代码可读性变低

if嵌套可以改造成if(){return}形式,让程序满足条件时,不再执行后续内容。

注意

if或else后的大括号可以不写,但只能跟一句执行语句。

switch语句

开关语句

如果一个变量的值能够列举出时,使用switch语句更为简洁。

变量不能为Long类型

switch(变量){
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    default:
        break;
}			

注意

switch小括号中的变量只能是非long的整型、字符型char、字符串String和枚举类型

小括号中的变量类型要与case后的值的类型相匹配

如果有某个case后的内容和变量值匹配,执行case后的代码,如果没有任何case匹配,执行 default后的代码

break和default可以省略。如果不写break,在某个case匹配时,执行玩相应的代码后继续执行后 续case后的代码,直到遇到break或没有代码为止

如果多个case后执行的内容一致,可以省略break,将统一要做的代码放在最后的case后

if语句与switch语句的选择

  • 如果条件能够一一列举出来时,使用switch语句更为简洁
  • 如果条件是一个范围是,中年使用if语句,如大于100
  • switch语句可以改为if语句,if语句不一定能改为switch语句

if语句和switch语句中的return关键字

  • if语句中可以使用return关键字不在执行后续的代码。可以使用这一点将原本的嵌套改成if-return的形式。
int a=3,b=4,c=5;
if(a+b<=c || a+c<=b || b+c<=a){
System.out.println("不能组成三角形");
return;
}
if(a==b && b==c){
System.out.println("等边");
}else if(a==b || a ==c || b==c){
System.out.println("等腰");
}else{
System.out.println("普通");
}

  • switch语句中,也可以使用return,但会造成switch语句之后的代码不执行,所以一般不在switch 语句中使用return;

作业

打印如下菜单

请选择功能:
1:注册
2:登录
3:退出
输入:1
进入注册功能

 /**
   * 请选择功能:
   * 1:注册
   * 2:登录
   * 3:退出
   * 输入:1
   * 进入注册功能
   */
        System.out.println("请选择功能:\n" +
                "1:注册\n" +
                "2:登录\n" +
                "3:退出\n");
            Scanner scanner = new Scanner(System.in);
            int a = scanner.nextInt();
            switch (a){
                case 1:
                    System.out.println("进入注册界面");
                    break;
                case 2:
                    System.out.println("进入登录页面");
                    break;
                case 3:
                    System.out.println("您已退出");
                    break;
            }

在这里插入图片描述

输入一个四位号码,判断个位和百位之和

8的倍数,一等奖

5,二等奖

3,三等奖

其他,谢谢参与

如输入1234,三等奖

int a = 0;
        Scanner scanner = new Scanner(System.in);
        while (a<999||a>10000) {
            System.out.println("输入一个四位号码");
            a = scanner.nextInt();
        }
        int ge = a%10, bai = a/100%10, sum=ge+bai;
        if (sum%8==0) System.out.println("一等奖");
        else if (sum%5==0) System.out.println("二等奖");
        else if (sum%3==0) System.out.println("三等奖");
        else System.out.println("谢谢参与");

在这里插入图片描述

输入年份和月份,输出共多少天

        /**
         * 输入年份和月份,输出共多少天
         * 1、3、5、7、8、10、12是大月,有31天;2月平年是28天,闰年是29天;
         * 4、6、9、11是小月,有30天。
         */
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入年份和月份:");
        String  a = scanner.nextLine();;
        String out="";
        String[] arr = a.split("\\s+");
        while (Integer.parseInt(arr[1])>12||Integer.parseInt(arr[1])<1){
            System.out.print("输入年份和月份:");
            a = scanner.nextLine();
            arr = a.split("\\s+");
        }
        switch (Integer.parseInt(arr[1])){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                out = "31";
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                out = "30";
                break;
            case 2:
                if (isRunnian_v2(Integer.parseInt(arr[0]))) out = "29";
                else out = "28";
                break;
        }
        System.out.println(arr[0] + "年的"+ arr[1] +"月有" + out + "天");

isRunnian_v2()

public static boolean isRunnian_v2(int year){
        boolean a = false;
        a = (year%4==0&&year%100!=0)||year%400==0?true:false;
        return a;
    }

在这里插入图片描述

1000~1999中有两个数字相同的次数(1个数字)

        /**
         * 1000~1999中有两个数字相同的次数(1个数字)
         * 分析有三种形式
         * 1100
         * 1001
         * 1010
         * 每种形式的1都不能与0相同
         * 1100 一位!=三位&&一位!=四位 && 二位!=三位&& 二位!=四位
         */
         int num=0;
        for (int i = 1000; i < 2000; i++) {
            int ge = i%10;
            int shi = i/10%10;
            int bai = i/100%10;
            int qian = i/1000;

            if(qian==bai&&shi!=ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || qian!=bai&&shi==ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || bai==shi&&qian!=ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || bai!=shi&&qian==ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || qian==shi&&bai!=ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge || qian!=shi&&bai==ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge){//个位与十位相同
                num++;
                System.out.print(i+" ");
                if(num%30==0) System.out.println("");
            }
        }
        System.out.println(num);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值