D05运算符和分支结构

运算符和分支结构

1.运算符

1.1关系运算符

> <  >=  <=  ==  !=
关系运算符的结果有且只有  true or false
用于在开发中的条件判断使用
    public static void main(String[] args){
    boolean ret = 10 > 5;
    System.out.println(ret);//结果为true
    
    //ret = 5 > 5;  结果为false
    
    ret = 5 >= 5; 
    System.out.println(ret);//结果为true
    
    ret = 10 < 5;
    System.out.println(ret);//结果为false
    
    ret = 10 <= 5;
    System.out.println(ret);//结果为false
    
    ret = 10 == 5;
    System.out.println(ret);//结果为false
    
    ret = 10 != 5; 
    System.out.println(ret);//结果为true
    }
}

1.2逻辑运算符

&&
    与,并且
    同真为真,有假【即】假
||
    或,或者
    有真【即】真,同假为假
!
    非,取反
    强牛,犟,假变真,真变假
逻辑运算符:
    一遍用于组合条件的判断,条件过滤,多情况分析。
短路原则:
​
    public static void main(String[] args){
        boolean ret = 5 > 3 && 10 >8;
        
        //结果为true
        System.out.println(ret);
        
        ret = 5 > 10 || 10 >8;
        
        //结果为true
        System.out.println(ret);
        
        ret = 5 > 10 || 10 >20;
        
        //结果为false
        System.out.println(ret);
        
        ret = !(10 > 5);
        
        //结果为false
        System.out.println(ret);

【补充知识点:逻辑运算符短路(断路原则)问题】

public class Demo4 {
    public static void main(String[] args) {
        /*
        int num = 10;
        boolean ret = 10 >5 && num++ > 10;
        
        System.out.pringtln("num : " + num); //11
        System.out.pringtln(“ret :“ + ret); //false
        */
        
        int num = 10;
        boolean ret = 10 >15 && num++ >= 10;
        /*
        短路原则问题:
            逻辑与短路(断路)元素问题
            10 > 15 该表达式结果为false,已经决定了当前整个
            逻辑与表达式的结果为false,计算机为了提高效率,
            从逻辑与false条件开始,之后的表达式不再运行
        */
        System.out.println("num : " + num); //10
        System.out.println("ret :" + ret); //false
        
        
        int num1 = 10;
        boolean ret1 = 10 > 5 || ++num1 >5;
        /*
        短路原则问题:
            逻辑或断路原则问题
            在逻辑或表达式中,出现了第一个为true条件,整个
            表达式结果已经为明确true,不需要再进行之后的判
            断,节约计算机资源,提高效率
        */
        System.out.println("num1: " +num1);//10
        System.out.println("ret1 : " + ret1);//ture
    }
}

1.3自增自减运算符

【注意事项】
    1.自增自减运算符有且只能操作变量!!!
    2.建议,自增自减运算符独立存在!单独成行,减少代码中的歧义!!!
    3.【个人建议】
        使用 += 1 和 -= 1 替代自增自减运算符
        Swift取消了 自增自减运算符
+ + :
     在变量之后,首先执行变量所在行语句,再执行自增1操作
     在变量之前,首先执行变量自增1操作,再执行所在行语句
- - :
     在变量之后,首先执行变量所在行语句,再执行自减1操作
     再变量之前,首先执行变量所在行语句没在执行自减1操作
public class Demo3 {
    public static void main(String[] args) {
        
        int num = 10;
        
        //先执行完该行语句后,num++会执行自增1操作
        System.out.println("num++ : " + num++); //10
        
        /*自增运算符单独存在展示
        System.out.println("num++ : " + num);   
        num++;    10  */
        
        System.out.println("num : " + num);   // 11   
        
        //到这里num值已经由10自增1为11,先执行自增操11+1==12后
        //再执行该行语句结果为12
        System.out.println("num++ : " + ++num); //12
        
        //上行语句num执行完后为12,该行结果为12
        System.out.println("num : " + num);   // 12
    }
}
        

2.从键盘上获取用户录入的数据(控制台输入)(CV大法)

*程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。

*导包语法:import 包名,类名;//将外部class文件功能引入到自身文件中。

*使用顺序:

1.导入 java.util.Scanner。 导包,点技能点

2.声明 Scanner 类型的变量。 Scanner : 扫描器

3.使用Scanner 类中对应的函数(区分类型):

.nextInt(); //获得整数

.nextDouble(); //获取小数

.next(); //获取字符串

.next().charAt(0); //获取单个字符

注:如果输入了不匹配的数据,则会产生java.util.InputMisamatchException

1.导包,点技能点
  import java.util.Scanner;
  class Demo1 {}
  
2.获取Scanner的变量,扫描器的一个变量
  Scanner sc = new Scanner(System.in);   System.in输入,标准录入模式(键盘)
  
3.使用Scanner其中的方法
  获取int类型数据  sc.nextInt();  
  获取double类型数据 sc.nextDouble();             //float
  获取String类型字符串数据 sc.next();sc.nextLine();
  获取一个char类型字符数据  sc.next().charAt(0);
                        sc.nextLine().charAt(0);
//导包,让当前代码拥有可以使用Scanner的能力
import java.util.Scanner;
​
public class Demo5 {
    public static void main(String[] args) {
        
        /*int num = 0;
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入一个整数");
        num = sc.nextInt();
        
        System.out.println("num : " + num);
        */
        char ch = '\0';//空字符
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入一个字符:");
        ch = sc.nextLine().charAt(0);
        
        System.out.println("ch: " + ch);
        
    }
}

3.选择结构和分支结构

概念:根据已知条件进行逻辑判断,满足条件后执行相应操作。

3.1 if 分支结构

 if (/*布尔类型的表达式 true or false*/) {
     //语句体
 }
 // 后续代码
​
/*
执行流程
    首先判断布尔类型的表达式 true 还是 false
    true 执行语句体
    false 执行后续代码
*/
展示:
class Demo6 {
    public static void main(String[] args) {
        //true执行语句体 | false执行后续语句
        boolean flag = false;
        
        if (flag) {
        System.out.println("天王盖地虎,小鸡炖蘑菇");
        }
        
        System.out.println("后续代码....");
    }
}

3.2 if - else分支结构

 if(/*布尔类型的表达式 true or false */){
     //true 语句体
     else{
        //false语句体 
     }
 }
 /*
 执行流程:
    首先判断if之后小括号里面的布尔类型数据到底是什么
    如果为ture,执行ture语句体
    如果为false,执行false语句体
    
    世界上最遥远的距离是,我在if里,你在else里
 */
展示:
class Demo7 {
    public static void main(String[] args) {
        boolean flag = false;
        
        if (flag) {
            System.out.println("我在if里等你");
        } else {
            System.out.println("你可等着把,这辈子遇不到~~~");  
        }
        
        System.out.println("后续代码...");
    }
}

3.3 if - else if 分支结构

/*
学生的成绩划分:
    >= 90 优秀
    >= 80 良好
    >= 70 中等
    >= 60 及格
    < 60 不及格
*/
​
 if (/*布尔条件1*/) {
     //处理方式1
 } else if (/*布尔条件2*/) {
     //处理方式2
 } else if (/*布尔条件3*/) {
     //处理方式3
 } else {
     //无匹配项处理方式
 }
/*
执行流程:
    使用已有条件匹配if之后的布尔条件
    匹配到任何一个布尔条件,指定对应的处理结果,结束 if - else if 结构,执行后续代码
    如果没有任何一个条件匹配,执行else里面语句,然后在执行后续代码
    
注意:
    else可以省略,按照自己的业务逻辑需要考虑是否省略else选择,else可以处理用户在输入过程中超出else if选择的一些特殊情况
*/
展示:
//导包
import java.util.Scanner;
​
class Demo8 {
    public static void main (String[] args) {
        int score = 0;
        //Scanner扫描器变量
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入学生的成绩");
        score = sc.nextInt();
        
        //用户输入数据合法性判断问题
        if (score < 0 || score >100 ) {
            System.out.println("亲,您输入的数据不对哦~~~秋咪~~~");
            //程序退出
            System.exit(0);
        }
        
        //if - else if
        if (score >=90){
            System.out.println("秀儿");   
        } else if (score >=80) {
            System.out.println("良儿");
        } else if (score >= 70) {
            System.out.println("中儿");
        } else if (score >= 60) {
            System.out.println("过儿");
        } else {
            System.out.println("让你爹带着拖鞋来学校一趟");
        }
        
    }
}

【补充知识点:用于输入数据的合法性判断问题】

在实际开发中,存在生活中数据的合法性和程序运行的语法要求冲突问题。
在程序运行的过程中,我们需要用户输入的数据进行合法性判断,如果用户输入的数据不是合法范围以内的,需要给与用户提示,并且不可以进入正常的代码运行过程中。
学生的成绩0~100,超出0~100都是不合法的!!!
1.不能大于100   score > 100
2.不能小于0     score < 0
3.满足任何条件都是非法情况!!!
    score > 100 || score  < 0
4.if判断
//导包
import java.util.Scanner;
​
class Demo8 {
    public static void main (String[] args) {
        int score = 0;
        //Scanner扫描器变量
        Scanner sc = new Scanner(System.in);
        
        System.out.println("请输入学生的成绩");
        score = sc.nextInt();
        
        //用户输入数据合法性判断问题
        if (score < 0 || score >100 ) {
            System.out.println("亲,您输入的数据不对哦~~~秋咪~~~");
            //程序退出
            System.exit(0);
        }
        
        //if - else if
        if (score >=90){
            System.out.println("秀儿");   
        } else if (score >=80) {
            System.out.println("良儿");
        } else if (score >= 70) {
            System.out.println("中儿");
        } else if (score >= 60) {
            System.out.println("过儿");
        } else {
            System.out.println("让你爹带着拖鞋来学校一趟");
        }
        
    }
}

3.4 switch - case 结构

 switch (/*变量|表达式*/) {
         case 值1:
         //处理方式1;
            break;
         case 值2:
         //处理方式2;
             break;
        default:
         //最终处理方式
            break;                  
 }
/*
执行流程:
    去除switch小括号里面的数据匹配对应的case选择
    如果存在case匹配,执行对应的处理方式
    如果没有任何的一个case匹配,执行default处理方式
    
switch case 使用注意事项
    1.break 关键字作用是用于跳出对应的case选项
    2.break 省略之后,执行对应的case选择,会继续运行到下一个break或者大括号结尾终止switch - case运行
    3.在case选择中不允许出现相同的选择,语法错误!!!
    4.在switch case语句体中,能够执行的代码有且只能是case之后或者default之后的代码,其他代码都不可以执行;
    5.default可以省略,按照自己的业务逻辑需要考虑是否省略default选择,default可以处理用户在输入过程中超出case选择的一些特殊情况。
*/
展示:
import java.util.Scanner;
class Demo9 {
    public static void main(String[] args) {
        int choose = 0;
        Scanner sc = new Scanner(System.in);
        
        System.out.println("1.肥仔快乐水");
        System.out.println("2.浓郁咖啡摩卡");
        System.out.println("3.崂山白蛇草水");
        System.out.println("4.芬达");
        System.out.println("请输入您的选择");
        choose = sc.nextInt();
        
        switch (choose) {
            case 1:
                System.out.println("3RMB 肥仔快乐水");
                break;
            case 2:
                System.out.println("42RMB 浓郁咖啡摩卡”");
                break;
            case 3:
                System.out.println("30RMB 崂山白蛇草水");
                break;
            case 4:
                System.out.println("3RMB 芬达");
                break;
            default:
                System.out.println("臣妾做不到啊~~");
            break;
        }   
    }
}

3.5条件运算符/三目运算符

格式:
    条件判断 ?  ture处理方式 :false处理方式;
条件运算符/三目运算符
    使用局限性大,类似于if - else结构。
展示:
class Demo10 {
    public static void main(String[] args) {
        //可以用于取巧,但是不建议多次使用,或者嵌套使用
        int num = 10 > 5 ? 888 : 666;
        
        //条件判断T为888,F为666
        System.out.println(num);
        
        /*类似于if - else 结构
        int num1 = 0;
        if (10 > 5) {
            num1 = 888;
        }else{
            num1 = 666;
        }
        System.out.println("num1");
        */
    }
}

3.6 分支结构嵌套

语法:
​
if (外层表达式) {
    if (内层表达式) {
        //内层代码块1
    } else {
        //内层代码块2
    }
} else {
    //外层代码块
}
​
执行流程:
    当外层条件满足是,再判断内层条件。
注意:
    *一个选择结构中,可嵌套另一个选择结构。
    *嵌套格式正确的情况下,支持任意组合
class Demo11 {
    public static void main(String[] args){
        int score = 100;
        if(score >= 90){
            if(score >= 95) {
                System.out.println("A+");   
            } else {
            System.out.println("A-");       
            }
        }else{
            System.out.println("A--");
        }
    }
}

4.局部变量

*概念:声明在函数内部的变量,必须先赋值再使用。
*作用范围:定义行开始到所在的代码块结束。
*注意:多个变量,在重合的作用范围内,不可出现重名(命名冲突)。
存在于代码块中的变量!!!
1.局部变量有且只能在所处的代码块中使用,超出当前代码块范围无效!!【作用域问题】
2.在作用域范围内,任何的地方可以直接使用对应的变量
3.在一个变量的作用域范围以内,不能重新定义同名变量,报错!
4.局部变量未赋值不能使用

课堂练习

1.完成条件:判断是不是闰年
    能被4整除,但是不能被100整除,或者可以被400整除
    a. year % 4 == 0;
    b. year % 4 != 0;
    c. year % 400 == 0;
    (year % 4 == 0 && year % 100 != 0) || year % 400 == 0
2.完成条件:判断一个字符是不是大写英文字符
    'A' <= ch <= 'Z'语法错误
    ch >= 'A' && ch <= 'Z'
3.完成条件:判断一个字符是不是英文字符
    a.英文字符中大写靠前,小写靠后
    b.大写和小写英文字符之间有其他字符
    (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')
    
4.使用if判断完成对应90后00后判断,用户输入年龄,判断情况
​
5.用户输入一个数值,判断是不偶数
​
6.用户输入自己的工资,判断是否需要缴税
​
class HomeWork4 {
    //使用if判断完成对应90后和00后判断,用户输入年龄,判断情况
    public static void main(String[] args){
        int age = 0;
        
        if (age >= 11 && age <= 20) {
            System.out.println("00后");
        } else if (age >= 21&& age <= 30){
            System.out.println("90后");
        } else {
            System.out.prlintln("老的算80后");
        }
    }
}
class HomeWork5 {
      //用户输入一个数值,判断是不是偶数
    public static void main(String[] args) {
        int num = 0;
        
        if(num % 2 == 0){
            System.out.println("偶数")
        }else{
            System.out.println("奇数");
        }
    }
}
class HomeWork6 {
    //用户输入自己的工资,判断是否需要缴税
    public static void main(String[] args) {
        double salary = 0.0;
        
        if (salary > 5000) {
            System.out.println("我为国家做贡献,我要养家,加油");
        } else {
            System.out.println("我不允许出现这种情况");
        }
    }
}

作业

1.代码三遍
2.笔记整理好
3.打字练习
4.分支结构练习题
//课题1~100相加
​
public class Demo17 {
    public static void main(String[] args) {
        int i = 0;
        int k = 0;
        
        for (int j = 1; j <= 100; j ++) {
            k += j;
            System.out.println(k);
        }
        
    }
}
//打印1~100之间既能被3整除,又能被5整除的数字
​
public class Demo13 {
    public static void main(String[] args) {
    
    int j = 0;
    
    for (int i = 1;i <= 100; i++) {
            if(i % 3 ==0 && i % 5 == 0) {
    //变量 j++ 为记录出现次数            
                j++;
                System.out.print(i + "\t");
            }
        }   
    System.out.println("共计出现次数:" + j);
    }
}
​
//用制表符 \t  打印 1~100
public class Demo12 {
    
    public static void main(String[] args) {
        
    
    for(int i = 99;i>0;i--) {
        
        System.out.print(i + "\t");
        }
    
    }
}
​
//while 循环打印1~100相加
public class Demo9 {
    public static void main(String[] args) {
        /*
        // 循环变量  i j k l m n
        int i = 10;
        while(i > 3) {
            
            //+ i 标识打印每次循环时的值数
            System.out.println("我想吃烤羊排" + i );
            
            // i -= 1;或者 i-- 每次循环后-1,条件为false是终止循环
            i-= 1 ;
        }
        */
        int i = 0;
        int num = 0;
        while (i <= 100) {
            num = num + i ;
        System.out.println("i结果为"+ i);
        System.out.println("num结果为"+ num);
            ++i;
        }
        System.out.println("1累加到10的和" + num);
    }
}
​
​
/**
*测试if-else if多分支结构
*随机生成年龄,根据不同年龄打印不同效果
*/
public class Demo8 {
    public static void main(String[] args) {
        int age = (int)(120*Math.random());
        
        System.out.println("年龄是:" + age);
        
        //15岁以下(不含15):儿童;15~24:青年;25~44:中年;45~64:中老年;65~84:老年,85~99老寿星
        //100-109:百岁老人;110以上:申请国家记录;
        
        if (age < 14) {
            System.out.println("儿童:好好玩!");
        } else if (age < 25) {
            System.out.println("青年:努力学习,不然会被社会毒打");
        } else if (age < 45) {
            System.out.println("中年:成家立业");
        } else if (age < 65) {
            System.out.println("中老年:不服老!继续干~!");
        } else if (age < 85) {
            System.out.println("老年:好好休息!跳跳广场舞");
        } else if (age < 100) {
            System.out.println("老寿星,好好休息,看看广场舞~!");
        } else if (age < 110) {
            System.out.println("百岁老人,不容易,安心养老吧~~~!");
        } else {
            System.out.println("申请国家记录吧!!!太牛了!!!!");
        }
        
        
    }
}
​
//使用if else 做一个掷骰子游戏
​
public class Demo7 {
    public static void main(String[] args) {
        //调用(Math.random()*6)+1;随机生成0-5任意一个值,+1模拟骰子1~6数值;
        int first = (int)(Math.random()*6)+1;
        int second = (int)(Math.random()*6)+1;
        int third = (int)(Math.random()*6)+1;
​
        //打印第一,二,三次投掷结果
        System.out.println("第一次掷骰子:" + first);
        System.out.println("第二次次掷骰子:" + second);
        System.out.println("第三次掷骰子:" + third);
        
        /*  如果if结果为true,执行if语句块,程序结束,执行下行语句
        
            如果if为false,执行 else if布尔式结果为ture执行
            else if语句块,程序结束,执行下行语句;如果结果为false,执行
            else语句块,程序结束,执行下行语句
            
        */
        if (count > 15) {
            System.out.println("今天手气不错");
        } else if (count >= 10) {
            System.out.println("今天手气一般,再来两把!!");
        } else {
            System.out.println("手气不行!回家吧!!!");
        }
        System.out.println("今天得分:" + count);
    }
}
​
​
//测试if else双分支结构
​
public class Demo6 {
    public static void main(String[] args) {
        
        /*  r 为圆半径,aeea为圆面积,circle为圆周长
            调用Math.random()随机生成一个函数,* 4 结果赋值为半径值
            圆面积 = 3.14 * 半径*半径(半径的平方)’
            圆周长 = 2 * 3.14 * 半径
            
        */
        double r = 4 * Math.random();
        double area = 3.14 * r * r;
        double circle = 2 * 3.14 * r;
        
        //打印半径,面积,周长
        System.out.println("半径:" + r);
        System.out.println("面积:" +area );
        System.out.println("周长:" + circle);
        
        /*调用if else双分支结构,根据if (area >= circle)比较
        “面积数的数值和周长数值“;
        
        如果结果为true,则执行if语句
        (System.out.println("面积的数值大于等于周长"),
        
        如果结果为false,则执行else语句,
        System.out.println("面积的数值小于周长!");
        */
        if (area >= circle) {
            System.out.println("面积的数值大于等于周长");
        } else {
            System.out.println("面积的数值小于周长!");
        }
        
    }
}
​
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值