运算符 分支结构

赋值运算符

=左边为引用名(变量名)右边放值

    int n1 = 10;
    int n2 = 7;
    int temp = 0;
    temp = str.length();
​
​
    int i = 15;
    Scanner input = new Scanner(System.in);
    String name = input.next();
  
    int n = i;  //基本数据类型 赋值 给的就是值本身
    //基本数据类型 传递值之后 两者没有关系
    syso(n);//15
    syso(i);//15
​
    n=100;
    syso(n);//100
    syso(i);//15
  
​
    Scanner input1 = input;
    //引用数据类型 赋值 给的是地址

算术运算符

+   优先考虑左右两边是否是数值类型 可否做+法运算   不能做加法运算 则表现为连接左右两边构成字符串
  
    sout('a'+'b');  97+98
  
    sout('a'+15);   //112           加法
    sout("a"+15);   //a15
    syso('a'+""+15);    //a15       连接
    syso('a'+15+""); //"112"
    syso('a'+(15+"")); //a15
​
    syso('a'-15);//82
    syso("15"-15);//报错
以下只能用于数值类型
-
*
/   运算过程中 如果都是int类型 计算结果依然是int类型  (注意是否需要小数) 除数不能为0
    11/2=5.5    11/2 = 5  
%   求模 求余数 依然是做除法 返回的是余数  用于判断数字奇偶
    int num = input.nextInt();
    syso(num%2==0);//返回true 或者false
    //String str = num%2==0?"是偶数":"是奇数";
    syso(num+(num%2==0?"是偶数":"是奇数"));
​
    int l = 15;   syso(l+1)
    l = l+1;    ==> l+=1;   ==>l++;     ++l
    l = l-1;    ==> l-=1;   ==>l--;     --l
    l = l+5;    ==> l+=5;   
    syso(l);    //20
    l = l*5;    ==> l*=5;
    l = l/5;    ==> l/=5;
​
l++;
++l;
syso(++l);
​
int n = l*5;
​
​
​
++      l = l+1;===>  l+=1; ==> l++;
--      l = l-1;===>  l-=1; ==> l--;
  
+=      l += 2 ===>     l = l+2;
-=
*=      l = l*3;    ==> l*=3;
/=      l = l/2;    ==> l/=2;
​
syso(l*3);//只是展示了一下l的三倍    l*=3    l*3
l = l*3;
​
​
​
int num = 5;
syso(num++);    //先输出5      num再+1 变为6
syso(num);      //6
//syso(--num>5);    //false     先做--    num变为5  再输出这个5
syso(num-->5);//true
syso(num);      //5

案例

女生5人 男生7人 请计算女生百分比

        int girl = 5;
        int boy = 7;
        int sum = girl+boy;//12
      
        //double result = girl/sum; //0.0 会直接砍掉小数点后面的数字
      
        double result = girl*1.0/sum;       //0.416666
        System.out.println(result*100+"%");

int m = 3;

int n = --m + ++m + (m++) + (m+=2)- --m + m*3 + m++;

mn

2

2

3

5

8

4

6

14

5

9 + 5*3=24

29

6

int m = 3;

int n = ++m - m-- + --m + (m*=2) - --m - m-- + m*2 - m--;

m n

4

4

0

3

2

2

4

6

3

3

0

2

0+2*2=4

2

1

关系运算符

所有使用关系运算符连接的式子 返回的都是 boolean 类型的值

> < >= <= != == 
基本数据类型 比较是否相同 可以用== 其实比的就是地址 
String类型 地址不同 不能使用==  要用.equals() 方法比较  忽略地址 比较值
  
    String s1 = "aaa";
    String s2 = "aaa";
    //syso(s1==s2); //true
    int len = s1.length();
    char zf = s1.charAt(0);
    syso(s1.equals("AAA"));//false
    syso(s1.equalsIgnoreCase("AAA"));//true
​
    syso(s1.compareTo("bbb"));//-1   axx   bax   bba
    syso(s1.compareTo("BBB"));//97-66=31
    syso(s1.compareToIgnoreCase("BBB"));//-1
  
5<a<10  5<a&&a<10       a>5&&a<10       a%3==0&&a%5==0  a%15==0
      
        //boolean b = true;
​
char c = 'a';
syso(c==97);    //true
​
char c = '1';
syso(c!=1); //true   char类型的1 对应的ascii值是49 和数字1 不等
​
String name1 = new String("张三");
String name = "李四";
//希望不相同的时候返回true
syso(!name.equals(name1));//true
name = "张三";
syso(!name.equals(name1));//false
​
​
char zf
    '0' 0
    zf>=0 && zf<=9

如果一个场景 需要放入真假值

1.可以直接放 true、false

2.可以放boolean类型的变量名 boolean bool = true;!bool? : if(bool)

3.放带关系运算符的表达式 例如 l>3 l==5 l!=5 .equals("")

案例

用户输入用户名String 和 密码int 输入年龄 输出 用户名是不是"张三" 密码 是不是 123

输出 xxx已成年 xxx未成年

        Scanner input = new Scanner(System.in);
        System.out.println("请输入用户名");
        String name = input.next();
        System.out.println("请输入密码");
        int pwd = input.nextInt();
        syso("请输入年龄");
        int age = input.nextInt();
      
        //==比的是地址 基本数据类型的值都来自于常量池 可以使用==比较
        System.out.println("密码是123么?"+(pwd==123));
      
        //字符串类型 都有自己的地址 因此要使用equals()
        //String n = "张三";
        System.out.println("用户是张三么?"+(name.equals("张三")));
​
        syso("成年了么?"+(age>=18));

逻辑运算符

将多个关系运算符的表达式 进行关联依然返回boolean类型的值

&&并且两个为真才是真 一个为假都是假如果第一个条件为假 则直接结束判断

|| 或者两个为假才是假一个为真就是真 如果第一个条件为真 则直接结束判断

! 取反真变假 假变真

&并且两个为真才是真 一个为假都是假 无论第一个条件真假 都会将后续判断执行完毕

|或者两个为假才是假一个为真就是真 无论第一个条件真假 都会将后续判断执行完毕

案例

输入语文成绩 数学成绩s1 s2

是不是都及格了

是不是有一科是满分

数学成绩是否大于语文成绩

数学成绩是否大于平局分

是不是至少有一科优秀 (85分)

语文和数学都大于90分 或者 任易一科100分都可以获得奖励

(s1>90&&s2>90) || (s1==100||s2==100)

    int score1 = input.nextInt();   //50
    int score2 = input.nextInt();   //98
    boolean bool = score1>=60 & score2++>=60 ; //false
    syso(score2);   //99
    boolean bool = score1>=60 && score2++>=60 ; //false
    syso(score2);  //98

三元运算符

变量 = 判断条件 ? 值1 : 值2

案例

如果数学成绩==100 奖励笔记本 否则 刷题去

  
    //syso(true?"奖励笔记本":"刷题去");
​
    int score1 = input.nextInt();
    boolean bool = score1==100;
    String result = bool ? "奖励笔记本"  : "刷题去" ;
    syso(result);
​
    syso(score1!=100? "刷题去" : "奖励笔记本" );
​
    syso(score1==100? "奖励笔记本" : "刷题去" );
​
    String day = input.next();//接收周几
    String result = day.equals("周一")? "马铃薯" : day.equals("周二")? "土豆": day.equals("周三")?"洋芋":"满汉全席";
​
    Scanner input = new Scanner(System.in);
    syso("请输入性别");
    char gender = input.next().charAt(0);              nextLine()      
      
      
        方法名+功能
        所属类型
        参数列表
        返回值
    字符串方法
        int     length() 
        char    charAt(int index) 
        boolean equals(String str)
​
    syso("请选择性别1.男2.女");
    //int sel = input.nextInt();
    //char gender = sel==1?'男':'女';s
    char gender = input.nextInt()==1?'男':'女';
​
    if(sel==1){
        gender = '男';
    }else{
        gender = '女';
    }
​
1.嵌套进去的是一个完整模块
2.嵌套在某一个情况内
       
  
    写外面不要想里面 写里面不要想外面
  
  
//三元运算符的嵌套  最终会返回一个值 因此 内部不能写逻辑代码
            //1.嵌套进去的是一个完整模块
            //2.嵌套在某一个情况内
            //3.写外部 不要想内部 写内部 不要想外部
      
        //不要有重复条件
        //做区间判断时 将最难满足的条件写最前面

练习

询问今天是否下雨 如果下雨 则 雨中漫步 否则 带伞防雨

询问用户年龄 10岁以下 吃西瓜 10-20 吃西餐 20以上 吃火锅

询问今天星期几 周一 马铃薯 周二 土豆 周三 洋芋 周四 薯片 周五 薯条 其余 满汉全席

int boys = 15;girls = 5; 分别说出以下四种情况的str 和boys , girls的结果
​
String str = boys++>15 || girls++>0 ? "情况1":"情况2";     1   16   6
​
String str = boys++>15 && girls++>0 ? "情况1":"情况2";      2  16   5
 
String str = --boys>15 & girls-->3 ? "情况1":"情况2";      2   14   4
​
String str = boys>30 && girls-->4 ?  "情况1":"情况2";     2     15   5
  
String str = boys>30 | girls-->4 ?  "情况1":"情况2";    1    15    4
​
String str = (boys*=2)<30 | --girls>4? "情况1":"情况2";   2   30   4
​
String str = boys<10 && --girls>4? "情况1":"情况2";     2   15   5
​
String str = (boys+=5)<=20 & ++girls>4? "情况1":"情况2";   1  20  6
​
String str = boys++==15 ||  girls-->4? "情况1":"情况2";  1   16   5

案例

询问百米用时几秒 12s以内 进入决赛 再询问性别 来分别进入 男子组决赛 女子组决赛

没有跑进12s 遗憾出局

随机数

Scanner nextInt() 接收一个整数

RandomnextInt()从int所有的值中随机一个

nextInt(int)返回一个从0 到参数-1中的随机数字

24-55 32 0-31 24

(最大值-最小值+1)+最小值

int n = nextInt(55-24+1)+24;

nextInt(32)+24

12 45 32 89 77 51 目前没有办法

1.石头 2.剪刀 3.布

Random r = new Random();

//r.nextInt()

n1 = r.nextInt(3)+1;

n2 = input.nextInt();

if(n1==n2){

平局

}else if(n1==1&&n2==2 || n1==2&&n2==3 ||n1==3&&n2==1){

用户输

}else{

用户赢

}

案例

用户输入一个字符串 系统随机从中取出一个字符作为猜测的目标

分支结构(选择结构)

if()

没有大括号时 if判断只影响第一句话

if(判断条件){

当判断条件为真时要执行的代码

}

if(判断条件){

当判断条件为真时执行的代码

}else{

当条件不成立时执行的代码

}

String result = day.equals("周一")? "马铃薯" : day.equals("周二")? "土豆": day.equals("周三")?"洋芋":"满汉全席";

if(条件1){

条件1为真时执行的代码

}else if(条件2){

条件2为真时执行的代码

}else if(条件3){

条件3为真时执行的代码

}...else{//其余任何情况

以上条件都为假时执行的代码

}

案例

输入考试分数

90 奖励笔记本

80奖励手机

70奖励钢笔

60奖励作业

其余 一顿打

		int score = input.nextInt();
		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 if(score>70){
            //不报错 但无意义
        }else {
			System.out.println("一顿打");
		}
		if(score>90) {
            int i = 10;
			System.out.println("奖励笔记本");
            char gender = '男';
            if(gender=='男'){
                syso();
			}else{
                syso();
            }
        }else if(score<=70&&score>60) {
			System.out.println("奖励作业");

		}else if(score<=80&&score>70) {
			System.out.println("奖励钢笔");
		}else if(score<=90&&score>80) {
			System.out.println("奖励手机");
		}else {
			System.out.println("一顿打");
		}

总结

1.if(){}结构 有且只有一个 最开头做引导

2.else if(){}结构 可有可无 可有多个 一定在if后面

3.else{} 结构 可有可无 最多1个 在最后

4.从上向下依次判断 只要有一个成立 后续判断不再执行

5.当做区间判断时 一定注意条件的编写顺序 将最难满足的条件放上面

6.建议不要省略{} 普通代码块

练习

1.周一 西红柿 周二 番茄 周三 圣女果 周四 洋柿子 周五 番茄酱 其余 西北风

输入百米用时 选择性别 男 女 如果>=12 则遗憾出局 否则 判断进入男子组决赛 女子组决赛

2.下题使用switch结构的嵌套

展示菜单 1.注册 2.登录 3.退出

用户输入选项 输出对应的界面

1.注册

输出 欢迎进入注册界面 展示小菜单用if完成该小菜单

1.电话注册2.邮箱注册

选1输出 进入电话注册界面

选2输出 进入邮箱注册界面

2.登录

输出 欢迎进入登录界面 展示小菜单用switch完成该小菜单

1.电话登录2.邮箱登录

选1输出 进入电话登录界面

选2输出 进入邮箱登录界面

3.退出

输出 欢迎下次使用

syso("1.注册2.登录3.会员中心4.退出");

int s1 = input.nextInt();

if(){

syso(1.电话注册2.邮箱注册)

int s1_1 = input.nextInt();

if(){

}else{

}

}else if(){

syso("1.电话登录2.邮箱登录");

}else if(){

syso(1.会员积分2.会员信息3.会员活动)

if(){

}else if(){

syso(1.信息查询2.信息修改)

if(){

}else{

}

}else{

}

}else {

}

syso("1.注册2.登录3.会员中心4.退出")

if1.注册 输出 欢迎进入注册界面再产生以下子菜单

syso("1.电话注册2.邮箱注册");

if1.电话注册输出 欢迎进入电话注册界面else2.邮箱注册输出 欢迎进入邮箱注册界面else if2.登录if1.电话登录输出 欢迎进入电话登录界面else2.邮箱登录输出 欢迎进入邮箱登录界面else if3.会员中心if1.会员积分输出 欢迎进入会员积分界面else if2.会员信息if1.信息查询输出 欢迎进入会员信息查询界面else2.信息修改输出 欢迎进入会员信息修改界面else3.会员活动输出 欢迎进入会员活动界面else4.退出欢迎下次再来

syso("1.注册2.登录3.会员中心4.退出");

int sel = input.nextInt();

if(sel==1){

syso("欢迎进入注册界面");

syso("1.电话注册2.邮箱注册");

int s1 = input.nextInt();

if(s1==1){

syso("欢迎进入电话注册界面");

}else{

}

}else if(sel==2){

}

switch选择结构

只能做等值判断===》常常用于做菜单

switch(变量名){

case 值1:

{

当要判断的变量名 等于 值1 时执行的代码

break;

}

case 值2:

{

当要判断的变量名 等于 值2 时执行的代码

break;

}

case 值3:

当要判断的变量名 等于 值3 时执行的代码

。。。

default:

以上条件都不满足时 执行的而代码

}

syso("1.2.3.4.5.");
int sel = input.nextInt();
switch(sel){
    case 1:{

        break;
    } 
    case 2:{

        break;
    }
    default:
        syso("选项有误");
}



	Scanner input = new Scanner(System.in);
    syso("1.注册2.登录3.会员中心4.退出");
	int sel = input.nextInt();
	switch(sel){
    case 1:{
         syso("欢迎进入注册界面");
         break;
    }
    case 2:{
         syso("欢迎进入登录界面");
         break;
    }
    case 3:{
         syso("欢迎进入会员中心");
         break;
    }
    case 4:{
         syso("欢迎下次再来");
         //System.exit(0);	//安全退出整个程序
         break;
    }
    default:
         syso("输入有误 重新输入");
    }


syso("后续代码");//不会执行到

练习

周一吃番茄 周二吃 西红柿 周三吃 圣女果 周四吃 番茄 周五吃 番茄 周六吃 西红柿 周日吃 番茄 其余 输入有误 重新输入

大于90分 笔记本 99 91 9

大于80分 奖励手机

大于70分 奖励钢笔

大于60分 奖励作业

其余 一顿打

总结

1.只能做等值判断

2.不能有重复的选项 选项类型必须与判断的变量类型相同

3.如果不加break 代码会继续向下执行 一般最后一个选项可不加

4.各种case 包括default可以互换位置 放在前面的选项 注意添加break

5.只能判断byte short int char 枚举类型 String

/*
		 * 1.if万能  switch 只能做等值判断 一般用于菜单
		 * 2.if可以判断任意类型数据  switch只能判断byte short int char String 枚举类
		 * 3.if一个条件成立执行后会自动结束整个if结构  switch要借助break关键字退出
		 * 4.if可以有相同的判断(顶多无意义不执行) switch不允许有相同选项 会报错
		 * 5.if的else如果有一定在最后 switch的default可以在任意位置(注意添加break)
		 */
	
		//break 逻辑关键字 结束当前模块
		//1.后续不能直接跟代码(永远也执行不到 会报错)
		//2.不能直接用于单独的if语句中(if自己会结束 会报错)

案例

1.注册

1.邮箱注册 2.电话注册

2.登录

1.邮箱登录 2.电话登录

3.会员中心

1.会员积分

2.会员信息

1.信息查询

2.信息修改

3.会员活动

4.退出