FUNDAMENTAL Unit03 运算符和表达式 、 分支结构

1.运算符:

1)算术:+,-,*,/,%,++,–

// 输出255除以8所得的余数。 
int n = 225; 
System.out.println(n % 8);  //结果为1 

Java的自增运算符(++)和自减运算符(–)继承自C++,可以使变量的值加1或减1,但其写在变量前和变量后有不同的效果:
如果写在变量前,表示在使用这个变量之前加1或减1
如果写在变量后,表示这个变量使用完之后再加1或减1

int a = 10, b = 20;
int c1 = a++; // 先将a的值赋给c1,然后a再自加 
int c2 = ++b; // 先将b的值自加,然后再赋给c2
System.out.println("a=" + a + ", b=" + b + ", c1=" + c1 + ", c2=" + c2);
// 输出的结果为: a=11, b=21, c1=10, c2=21 

2)关系:>,<,>=,<=,==,!= boolean

int max = 10; 
int num = 9; 
boolean b1 = max > 15; 
boolean b2 = num%2  ==  1; 
System.out.println(b1);  // 结果为false 
System.out.println(b2);  // 结果为true 

3)逻辑:&&,||,! boolean
这里写图片描述

关于“短路逻辑”的问题
Java逻辑运算中的&&和||有短路的特性,当第一个关系表达式就可以判断出整个表达式的结果时,就不会再去判断后面的第二个表达式。
对于“&&”,当第一个操作数为false时,将不会判断第二个操作数,因为此时无论第二个操作数是什么最后的结果一定是false;
对于“||”,当第一个操作数为true时,将不会判断第二个操作数,因为此时无论第二个操作数为何,最后的运算结果一定是true。
示例代码如下所示:

int i = 100, j = 200;
boolean b1 = (i > j) && (i++ > 100);
System.out.println(b1);  // 结果为:false
System.out.println(i);   // 结果为:100,发生短路,i++不会被执行 
boolean b2 = i > 0 || j++ > 200;
System.out.println(b2);  // 结果为:true
System.out.println(j);   // 结果为:200,发生短路,j++不会被执行

4)赋值:=,+=,-=,*=,/=,%=
示例代码如下:

int num = 18, index;
System.out.println(index = num % 5);  // 结果为:3,赋值表达式本身也有值
System.out.println(index);  // 结果为:3
int a, b, c;
a = b = c = 100;  
// c=100 整个表达式的值为100, 将其赋值给b,同样b=(c=100)整个表达式的值也为100,然后有将这个值赋给了a,所以a 的值也是100。

这里写图片描述

5)字符串连接:+
示例代码

int a = 100;
String msg = "a=" + a;
System.out.println(msg);    //a=100,字符串拼接
msg = "" + 100 + 200;
System.out.println(msg);   //结果为: 100200,””+100,为字符串100再拼上200为100200
msg = 100 + 200 + "";
System.out.println(msg);   //结果为:300,100+200为算术运算结果为300,再加上””为300

6)条件(三目)运算:boolean?数1:数2
条件运算符的规则如下:
1.先计算boolean表达式;
2.如果boolean表达式的值为true,整个表达式的值为表达式1的值;
3.如果boolean表达式的值为false,整个表达式的值为表达式2的值。
示例代码如下:

int a = 100, b = 200;
int flag = a > b ? 1 : -1;   //因为a>b为false,所以整个表达式的值为-1,将其赋给flag,即:flag的值为-1。

2.分支结构:

1)if结构:1条路

语句0;
if(逻辑表达式){
        语句1;
        语句2;
}
语句3

如上语句的执行步骤如下所示:
步骤一:执行语句0;
步骤二:判断逻辑表达式的值,此表达式的值结果为boolean类型,即true或者false。此处可以是关系表达式也可以是逻辑表达式。
若值为true,则执行if语句块中的语句;
若值为false,则跳过if语句块;
步骤三:执行语句3语句。
if语句流程图

2)if…else结构:2条路

语句0if(逻辑表达式){
        语句块1;
} else {
        语句块2;
}
语句3

如上语句的执行步骤如下所示:
步骤一:执行语句0;
步骤二:判断if逻辑表达式的值:
若值为true,则执行语句块1;
若值为false,则执行语句块2;
步骤三:执行语句3语句。
if...else语句流程图

3)if…else if结构:多条路
在java程序中,当程序的分支数大于2时,可以用if-else嵌套的方式解决,即:else语句块中又包含if语句(或if-else语句)

4)switch…case结构:多条路
优点:效率高、结构清晰
缺点:整数、相等
break:退出switch

     switch(整型表达式) {
         case 整型常量值1:     //入口1
             语句1;
             语句2;
         case 整型常量值2:     //入口2
             语句3;
             ……
         default:               //默认入口
             语句n;
     }

switch...case流程图

任何复杂的程序逻辑都可以通过三种结构来实现:

1)顺序结构:从上往下逐行执行,每句必走
2)分支结构:有条件的执行,并非每句必走
3)循环结构:
这里写图片描述

闰年的判断公式:

1.能被4整除并且不能被100整除
或者
2.能被400整除
例:(year%4==0 && year%100!=0) || year%400==0

课堂代码整理:

package day03;
import java.util.Scanner;
//年龄判断程序
public class AgeRange {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入年龄:");
        int age = scan.nextInt();

        System.out.println(age>=18 && age<=50);
    }
}
package day03;
import java.util.Scanner;
//柜台收银程序
public class Cashier {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入单价:");
        double unitPrice = scan.nextDouble();
        System.out.println("请输入数量:");
        double amount = scan.nextDouble();
        System.out.println("请输入金额:");
        double money = scan.nextDouble();

        //计算总价(单价*数量)
        double totalPrice = unitPrice*amount;
        if(totalPrice>=500){ //满500
            totalPrice*=0.8; //打8折
        }

        if(money>=totalPrice){ //够
            double change = money-totalPrice; //计算找零(给的钱-总价)
            System.out.println("总价为:"+totalPrice+",找零为:"+change);
        }else{ //不够
            System.out.println("ERROR!您给的钱不够");
        }

    }
}
package day03;
import java.util.Scanner;
//命令解析程序
public class CommandBySwitch {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请选择功能: 1.显示全部记录 2.查询登录记录 0.退出");
        int command = scan.nextInt();

        switch(command){
        case 1:
            System.out.println("显示全部记录");
            break;
        case 2:
            System.out.println("查询登录记录");
            break;
        case 0:
            System.out.println("欢迎下次再来");
            break;
        default:
            System.out.println("输入错误");
        }
    }
}
package day03;
//分支结构的演示
public class IfDemo {
    public static void main(String[] args) {
        int num = 2;
        switch(num){ //byte,short,char,int
        case 1: //相当于if(num==1)
            System.out.println(111);
            break;
        case 2: //以此为入口
            System.out.println(222);
            break; //退出switch
        case 3:
            System.out.println(333);
            break;
        default: //所有case都未匹配时执行
            System.out.println(666);
        }

        /*
        int num = 5;
        if(num%2==0){
            System.out.println(num+"是偶数");
        }else{
            System.out.println(num+"是奇数");
        }
        System.out.println("over");
        */

        /*
        int num = 5;
        if(num%2==0){
            System.out.println(num+"是偶数");
        }
        System.out.println("over");
        */
    }
}
package day03;
import java.util.Scanner;
//闰年的判断
public class LeapYear {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = scan.nextInt();

        boolean flag = (year%4==0 && year%100!=0) 
                       || 
                       year%400==0;
        String str = flag ? year+"是闰年" : year+"不是闰年";
        System.out.println(str);

    }
}
package day03;
//运算符的演示
public class OperDemo {
    public static void main(String[] args) {
        /*
         * 6.条件(三目)运算符:
         *   1)语法:
         *       boolean?数1:数2
         *   2)执行过程:
         *       计算boolean的值:
         *         若为true,则整个表达式的结果为数1
         *         若为false,则整个表达式的结果为数2
         */
        /*
        int a=5,b=8;
        int max = a>b?a:b;
        System.out.println("max="+max);
        */

        /*
         * 5.字符串连接运算符:
         *   1)+:
         *     1.1)两边都是数字,则做加法运算
         *     1.2)两边若出现字符串,则做字符串连接
         */
        /*
        System.out.println(10+20+""+30); //"3030"
        System.out.println(10+20+30+""); //"60"
        System.out.println(""+10+20+30); //"102030"
        */

        /*
        int age = 37;
        System.out.println("age="); //age=
        System.out.println(age);    //37
        System.out.println("age="+age); //age=37
        System.out.println("我的年龄是:"+age);
        System.out.println("我今年"+age+"岁了");
        */


        /*
         * 4.赋值运算符:
         *   1)简单赋值运算符:=
         *   2)扩展赋值运算符:+=,-=,*=,/=,%=
         */
        /*
        int a = 5;
        a += 10; //相当于a=a+10
        System.out.println(a); //15
        a *= 2; //相当于a=a*2
        System.out.println(a); //30
        a /= 6; //相当于a=a/6
        System.out.println(a); //5
        */

        /*
         * 3.逻辑运算符:
         *   1)&&:短路与(并且),两边都为真则为真,见falsefalse
         *        ----第1个数为false时,发生短路(后面的不执行了)
         *     ||:短路或(或者),有一边为真则为真,见truetrue
         *        ----第1个数为true时,发生短路(后面的不执行了)
         *      !:逻辑非(取反),非真则假,非假则真
         *   2)逻辑运算是建立在关系运算基础之上的,
         *     逻辑运算的结果也是boolean型
         */

        /*
        int a=5,b=10,c=5;
        boolean b4 = a<b || c++>2;
        System.out.println(b4); //true
        System.out.println(c); //5,发生短路了
        */

        /*
        boolean b3 = a>b && c++>2;
        System.out.println(b3); //false
        System.out.println(c);  //5,发生短路了
        */


        /*
        boolean b2 = !(a>b);
        System.out.println(b2);     //!false=true
        System.out.println(!(a<b)); //!true=false
        */

        /*
        System.out.println(a>=b || c<b); //false||true=true
        System.out.println(a<=b || c>b); //true||false=true
        System.out.println(a==c || a<b); //true||true=true
        System.out.println(a!=c || a>b); //false||false=false
        */

        /*
        boolean b1 = a>=b && c<b;
        System.out.println(b1);          //false&&true=false
        System.out.println(a<=b && c>b); //true&&false=false
        System.out.println(a!=c && a>b); //false&&false=false
        System.out.println(a==c && a<b); //true&&true=true
        */






        /*
         * 2.关系运算符:
         *   1)>(大于),<(小于)
         *     >=(大于或等于),<=(小于或等于)
         *     ==(等于),!=(不等于)
         *   2)关系运算的结果为boolean型,
         *     关系成立则为true,关系不成立则为false
         */
        /*
        int a=5,b=10,c=5;
        boolean b1 = a>b;
        System.out.println(b1);   //false
        System.out.println(c<b);  //true
        System.out.println(b>=c); //true
        System.out.println(a<=c); //true
        System.out.println(a==c); //true
        System.out.println(a!=c); //false
        */


        /*
         * 1.算术运算符:+,-,*,/,%,++,--
         *   1)%:取模/取余,余数为0即为整除
         *   2)++/--:自增1/自减1,可以在变量前也可以在变量后
         *     2.1)单独使用时,在前在后无差别
         *     2.2)被使用时,在前在后有差别
         *           a++的值为a
         *           ++a的值为a+1
         */
        /*
        int a=5,b=5;
        //1)输出a--的值5  2)a自减1变为4
        System.out.println(a--); //5
        System.out.println(a);   //4
        //1)输出--b的值4  2)b自减1变为4
        System.out.println(--b); //4
        System.out.println(b);   //4
        */

        /*
        int a=5,b=5;
        int c = a++; //1)将a++的值5赋值给c 2)a自增1变为6
        int d = ++b; //2)将++b的值6赋值给d 2)b自增1变为6
        System.out.println(a); //6
        System.out.println(b); //6  
        System.out.println(c); //5
        System.out.println(d); //6
        */

        /*
        int a=5,b=5;
        a++; //相当于a=a+1
        ++b; //相当于b=b+1
        System.out.println(a); //6
        System.out.println(b); //6
        */

        /*
        System.out.println(5%2); //1,商2余1
        System.out.println(8%2); //0,商4余0,整除
        System.out.println(2%8); //2,商0余2
        System.out.println(8.5678%2); //0.5678
        */
    }
}
package day03;
import java.util.Scanner;
//成绩等级判断
public class ScoreLevel {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入成绩:");
        int score = scan.nextInt();

        if(score<0 || score>100){
            System.out.println("成绩不合法");
        }else if(score>=90){ //score>=0 && score<=100
            System.out.println("A-优秀");
        }else if(score>=80){
            System.out.println("B-良好");
        }else if(score>=60){
            System.out.println("C-中等");
        }else{
            System.out.println("D-不及格");
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值