一.运算符(二)
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^第二个操作数次方
<< 左移 左边的操作数转为二进制以后向左移动第二个操作数个位数,剩余空间补0,再转为十进制
总结: 8<<3 ==> 8*2^3 第一个操作数 * 2^第二个操作数次方
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);
}
}