一.运算符(二)

1.赋值运算符
       1)基本赋值运算符
            =    java中唯一个自右向左运算的符号
        2)扩展赋值运算符(算数运算符+基础赋值运算符)
            +=   -=   *=   /=    %=
            eg: a+=3;  ==> a=a+3;
            缺点:不直观
            优点: 自动做强制类型转换,提高执行效率,
            * 推荐使用扩展赋值运算符*         2.比较运算符|关系运算符
          结果是boolean类型的值
             >  <   >=  <=   仅适用于类型byte  short  int  long   float  double  char
              ==         !=     可以做基本数据类型的比较,可以做引用数据类型的比较

     3.逻辑运算符
        1)两边的操作数都得是值为布尔类型的表达式

& 与

两个操作数都是true才是true,一个为false结果就为false

| 或

一个为true就是true,两个都为false才为false

! 非

取反  !true-->false

^ 异或

相同为false,不同为true

短路 :如果左边的操作的值就能决定最终整个表达式的结果,右面的表达式就不在执行

&&    两个操作数都是true才是true,一个为false结果就为false
                ||      一个为true就是true,两个都为false才为false
               *推荐使用短路与      短路或*     4.条件运算符 :  三目| 三元
         1) 条件表达式 ? 值1 : 值2 ;
         2) 执行流程:
             a.先执行条件表达式  -->值为boolean类型的表达式 
             b.如果结果为true, 最终结果取值1
             c.如果结果为false,最终结果取值2
public class Operator04{
	public static void main(String[] args){
		int a=6;
		int b=7;
		//得到ab之间最大的值
		int max = a>b ? a : b;
		System.out.println(max);
		//计算a是否为一个偶数
		String str=a%2==0? "偶数" : "奇数";
		System.out.println(str);
	}
}

    5.位运算符(选择性了解) 
       1)如何执行:  操作数先转为2进制,进行运算,得到结果再转为十进制;
       2)优点 : 比直接做运算效率高
       3)   &  二进制的两个数,同一位置的值,进行逻辑判断,两个值如果有一个为0就为0,两个值都是1才是1
               |   同一位置的两个数,如果有一个为1就是1,两个都是0才是0
              ^   同一位置的两个数,如果相同为0,不同为1    

public class Operator05{
	public static void main(String[] args){
		System.out.println(2&3);  //2
		System.out.println(2|3);  //3
		System.out.println(2^3);  //1
	}

}

    6.位移运算符(选择性了解) 
         >>  右移   左边的操作数转为二进制以后,向右移动第二个操作数个位数,保留分水岭左边的内容转为十进制   分水岭:左边操                            作数二进制形态的最右边有一个分水岭
                         总结:    8>>3  ==> 8/2^3  第一个操作数 / 2^第二个操作数次方

                          

java PDPage 设置横向 java横向扩展_操作数

         <<  左移   左边的操作数转为二进制以后向左移动第二个操作数个位数,剩余空间补0,再转为十进制
                          总结:   8<<3  ==> 8*2^3  第一个操作数 * 2^第二个操作数次方

                             

java PDPage 设置横向 java横向扩展_java PDPage 设置横向_02


         

public class Operator05{
	public static void main(String[] args){
		System.out.println(8>>3);  //1
		System.out.println(3>>1);  //1
		System.out.println(10>>2);  //2
		System.out.println(8<<3); //64
		System.out.println(3<<2); //12
	}

}

7.运算符的优先级:

      单目  乘除  位  关系  ,   逻辑  三目  后  赋值

二.Scanner  (键盘输入    类名    引用数据类型)
     1.基本数据类型
         例如:    int a=4;
     2.使用引用数据类型的方式
        1)创建引用数据类型的变量|引用
            公式:    引用数据类型 变量名|引用 = new 引用数据类型();
        2)使用功能
            引用.功能名字();
     3.Scanner使用步骤:
        1)导包 import 相对地址------> import java.util.Scanner;   
            提供类Scanner的位置
            位置:类的上面导包
        2)创建Scanner类型的引用 ------> Scanner sc=new Scanner(System.in);
        3)功能名字();

nextInt()

接收用户输入的int类型整数

 

nextByte()

接收用户输入的byte类型整数

 

nextShort()

接收用户输入的Short类型整数

 

nextLong()

接收用户输入的Long类型整数

 

nextDouble()

接收用户输入的Double类型整数

 

nextFloat()

接收用户输入的Float类型整数

 

next()

接收用户输入的String类型数据

从有效字符开始接收,直到遇到空格,多个宫格,tab结束接受,遇enter停止功能;

nextLine()

接收用户输入的一整行的内容

从第一个位置开始接收,直到输入enter结束;

注:nextLine()功能之前如果存在系列的next功能.需要处理遗留在缓冲区的enter;

          

 

        4) 引用.close();   一定要在用完之后关闭,否则当前类中重新开启也不能用 

       

//导包
import java.util.Scanner;
public class Scanner07{
	public static void main(String[] args){
		//2.创建Scanner类型的引用
		Scanner sc=new Scanner(System.in);
		//3.使用功能
		//int i=sc.nextInt();
		//int i=sc.nextByte();
		//System.out.println(i);
		//double d=sc.nextDouble();
		/*
		String str=sc.next();
		System.out.println(str);
		//处理缓冲区中遗留的enter
		//sc.nextLine();
		String str1=sc.nextLine();
		System.out.println(str1);
		*/
		
		/*
		模拟用户的登录:
			laopei  0523
			
			1.键盘输入
			2.使用功能 接受用户名和密码
			3.判断是否满足
			4.输出信息
			
			注意: 字符串比较是否相等   字符串1.equals(字符串2)  比较字符串1与字符串2是否相等,如果相等返回true,不相等是false
		*/
		System.out.println("请输入用户名:");
		String uname=sc.nextLine();
		System.out.println("请输入密码:");
		String upwd=sc.next();
		//条件运算
		//boolean flag1="laopei" == uname ? true : false;
		String s=uname.equals("laopei") && "0523".equals(upwd) ? "登录成功" : "用户名或密码不正确";
		System.out.println(s);
		
		//关闭
		sc.close();
		
		/*
		Scanner sc2=new Scanner(System.in);
		int n=sc2.nextInt();
		System.out.println(n);
		*/
		
	}

}

5)引申:  String  是类名    引用数据类型

注意:

                格式:   字符串1.equals(字符串2)   

                     *比较字符串1与字符串2是否相等,如果相等返回true,不相等是false*

String flag1="laopei".equals(uname)?ture:false;

三.Random  (类  引用数据类型    产生随机数)

1.导包 ------> java.util.Random
     2.创建类型的引用   ------> Random ran=new Random();
     3.使用功能
        1)产生随机整数
                 nextInt()   --> int范围内的随机整数
                 nextInt(n)  --> 随机产生 [0,n) 随机整数 
                     n 只能决定最大范围
        2)产生随机小数
                 nextDouble()   [0.0,1.0) 随机小数
        3)也叫伪随机数
        4)常用公式:
             [0,max)   引用.nextInt(max);
             [0,max]   引用.nextInt(max+1);
             [min,max) 引用.nextInt(max-min)+min;
             [min,max] 引用.nextInt(max-min+1)+min;
//1.导包
import java.util.Random;
public class Random08{
	public static void main(String[] args){
		//2.创建类型的引用
		Random ran=new Random();
		//3.nextInt()
		int i1=ran.nextInt();
		System.out.println(i1);
		//nextInt(n);
		//[0,5)
		i1=ran.nextInt(5);
		System.out.println(i1);
		//[0,10]
		i1=ran.nextInt(11);
		System.out.println(i1);
		//[2,5)    [0,3)+2  [2,5)
		i1=ran.nextInt(5-2)+2;
		double d=ran.nextDouble();
		System.out.println(d);
	}
}

四.流程控制语句     

1.选择结构: 
             if ..else
             switch
        1)单分支|单选择
                  if(条件表达式){
                         语句体...
                   }
            *条件表达式:值为boolean类型的表达式
            *执行流程:
                 a.计算条件表达式的结果
                 b.如果false,就跳过if结构,继续向下执行
                 c.如果为true,执行{}中的语句体
         2)双分支|双选择
                if(条件表达式){
                    语句体1...
                }else{
                    语句体2
                }
             即:  如果条件满足执行语句体1,条件不满足执行语句体2
          3)多选择|多分支
                if(条件表达式1){
                    语句体1...
                }else if(条件表达式2){
                    语句体2...
                }else if(条件表达式3){
                    语句体3
                }else{
                    语句体n;
                }
             *执行流程:
                 a.先执行条件表达式1,如果为true,执行语句体1
                 b.如果为false,计算条件表达式2,如果为true,执行语句体2
                 c.如果为false,计算条件表达式3,如果为true,执行语句体3
                 d....
                 e.如果以上条件都不满足,执行else中的语句体n


             

public class Demo09{
	public static void main(String[] args){
		int age=11;
		//单选
		/*
		if(age>=7){
			System.out.println("孩子,来接受教育吧!!!");
		}
		*/
		//双选
		if(age>=7)
			System.out.println("孩子,来接受教育吧!!!");
			//System.out.println("来接受教育吧!!!");
		else 
			System.out.println("回家玩泥巴!!!");
		System.out.println("回家玩泥巴!!!!!!!!!!!!!!!!!!!!!!"); //不受if..else的控制
		//多选择|多分支
		/*
		if(age>0){
			System.out.println("age>0!!!");
		}else if(age==0){
			System.out.println("age=0!!!");
		}else{
			System.out.println("age<0!!!");
		}
		*/
		/*
		if 和 三元运算符 之间的选择
			1.if能够对多个条件进行判断
			2.三元运算符肯定有结果, if可以没有结果
			3.if结构清晰,三元运算符结构简单效率较高
		*/
	}
}

   2.  switch  定值判断

1)   switch(表达式){
                      case 值1:
                             语句体1;
                             break;
                      case 值2:
                             语句体2;
                             break;
                            ....
                     default:
                            语句体n;
                            break;
                  }


         2)表达式仅为这几类: byte,short,int,char , 枚举(1.5),字符串(1.7) 这几种类型的值
         3) case: case后面接的值是与表达式进行判断,必须是一个值,不能是区间
         4) break: 防止case穿透 结束switch语句
         5) case穿透:从满足条件的语句体开始执行,如果遇到break结束switch,如果没有break下面的case不再判断直接执行语句体
         6) default:默认的,相当于else,如果以上都不满足,就执行default中的内容
             default位置可以改变
     3.if与switch之间的区别:
        1) if可以做区间判断
        2) switch 定值判断
        3) 能用switch都可以用if ,但是能用if的不一定能用switch    

public class Demo10{
	public static void main(String[] args){
		String flag="黄灯";
		/*
		switch(flag){
			default:
				System.out.println("灯坏了!!!");
				break;
			case "绿灯":
				System.out.println("绿灯行");
				break;
			case "黄灯":
				System.out.println("黄灯等一等");
				break;
			case "红灯":
				System.out.println("红灯停");
				break;
		}
		*/
		switch(flag){
			case "绿灯":
				System.out.println("绿灯行");
				break;
			case "黄灯":
				System.out.println("黄灯等一等");
				break;
			case "红灯":
				System.out.println("红灯停");
				break;
			default:
				System.out.println("灯坏了!!!");
		}
		byte i=10;
		switch(i*10){
			case 10:
				System.out.println("10");
				break;
			case 100:
				System.out.println("100");
				break;
		}
		boolean b=false;
	}
}

     4.循环  (重复执行一些代码)

for
               while
               do...while
          1) for循环
                    for(条件初始化;条件判断;条件变化 ){
                          循环体语句;
                     }


              执行流程:
                a.先执行条件初始化  声明一个变量并且赋值 i
                b.条件判断   对i进行判断   值为boolean类型的表达式
                    如果值为false,for循环结构结束,如果值为true,执行循环体语句
                c.条件变化
                   重复执行2,3步
              注意:在循环体语句中可以使用i的值   
                      变量i可以决定循环执行的次数

public class Demo11{
	public static void main(String[] args)
		for(int i=1;i<=10;i++){
			System.out.println("葵花小课堂开课啦!!!孩子感冒老不好多半是废了!!!"+i);
		}
		//打印10~20之间的数
		for(int i=10;i<=20;i++){
			System.out.println(i);
		}
		//求1+2+3+4的和  
		int sum=0;
		for(int i=1;i<5;i+=1){
			sum+=i; //sum=sum+i;
		}
		System.out.println(sum);
	}
}