运算符与选择结构
一、运算符
1、算术运算符
分类
+
运算符
1)、单目运算,表示正号,如: +5;
2)、双目运算符,表示加法,如: 5 + 6;
3)、字符串操作符,表示拼接、连接的含义,如: "a"+"b"的结果是“ab”
-
运算符
1)、单目运算,表示负号,如: -5;
2)、双目运算符,表示减法,如: 5 - 6;
++
与--
运算符
++
运算,变量自己增长1;
--
运算,变量自己减少1,用法与`++ 一致。
1)、独立运算:前++
和 后++
没有区别
变量前++
:例如 ++i
。
变量后++
:例如 i++
。
变量前--
:例如 --i
。
变量后--
:例如 i--
。
2)、混合运算:
- 和其他变量放在一起,
前++
和后++
就产生了不同。 - 变量
前++
:变量a自己加1,将加1后的结果6
赋值给b,也就是说a先自增。a和b的结果都是6
。
public static void main(String[] args) {
int a = 5;
int b = ++a;
System.out.println(a);//计算结果是6
System.out.println(b);//计算结果是6
}
- 变量
后++
:变量a先把自己的值5
,赋值给变量b,此时变量b的值就是5
,变量a自己再加1。a的结果是6
,b的结果是5
。
public static void main(String[] args) {
int a=5;
int b = a++;
System.out.println(a);//计算结果是6
System.out.println(b);//计算结果是5
}
注:前置++
(前置--
)都是先自身加1(减1),再参与运算或赋值;反之,先参与运算或赋值,再自身加1(减1)。
2、赋值运算符
- 赋值运算符,就是将符号右边的值,赋给左边的变量。
public static void main(String[] args){
int i = 5;
i+=5;//计算方式 i=i+5 变量i先加5,再赋值变量i
System.out.println(i); //输出结果是10
}
3、比较运算符
- 比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值
true
或者false
。
public static void main(String[] args){
char ch1='a';
char ch2='b';
System.out.println(ch1<=ch2);
String name1="Java";
String name2="李四";
System.out.println(name1!= name2);
System.out.println(ch1+1 != ch2);
}
- 练习:对下面代码进行注释
public static void main(String[] args){
double d=10/3;
int a=10/3;
System.out.println(a==d);
System.out.println(a);
System.out.println(d);
d=10/3.0;
a=10/3;
System.out.println(a==d);
System.out.println(a);
System.out.println(d);
System.out.println("hello"!="hello");
}
4、逻辑运算符
public static void main(String[] args){
System.out.println("----------------&---------------");
System.out.println(true&false); //false
System.out.println(false&false); //false
System.out.println(false&true); //false
System.out.println(true&true); //true
System.out.println("----------------|---------------");
System.out.println(true|false); //true
System.out.println(false|false); //false
System.out.println(false|true); //true
System.out.println(true|true); //true
System.out.println("----------------!---------------");
System.out.println(!false); //true
System.out.println(!true); //false
System.out.println("----------------^---------------");
System.out.println(true^false); //true
System.out.println(false^false); //false
System.out.println(false^true); //true
System.out.println(true^true); //false
System.out.println("----------------&&---------------");
System.out.println(true&&false); //false
System.out.println(false&&false); //false
System.out.println(false&&true); //false
System.out.println(true&&true); //true
5、条件运算符
条件运算符可以叫做三目运算符,或者三元运算符。
格式
条件表达式 ? 值1 : 值2
执行流程
1、执行条件表达式,计算其值为true
还是false
;
2、如果为true
,返回值1,否则,返回值2。
练习:
使用条件表达式,求两个数中最大的数。
//比较2个数的大小 ,求最大的数
public static void main(String[] args){
int a = 5;
int b = 10;
int max = a > b ? a : b;
System.out.printf("%d和%d中最大的数为:%d n",a,b,max);
}
二、Scanner
Scanner类:可以接收键盘输入的内容。
使用Scanner:
1、导入包。
使用Scanner需要导入包java.util.Scanner
2、创建Scanner类的变量 | 引用
Scanner sca = new Sacnner(System.in);
3、使用变量|引用调用Sanner类中的功能
4、测试next()
import java.util.Scanner;
public class testScanner{
public static void main(String[] args){
//1.导包
//2.创建某个类型的变量|引用
Scanner sc=new Scanner(System.in);
//3.使用功能
String s=sc.next();
System.out.println(s);
}
}
5、测试nextLine()
import java.util.Scanner;
public class testScanner{
public static void main(String[] args){
//1.导包
//2.创建某个类型的变量|引用
Scanner sc=new Scanner(System.in);
//3.使用功能
String s=sc.next();
System.out.println(s);
//测试nextLine()
s = sc.nextLine();
System.out.println(s);
}
}
观察发现,next()
遇到空格后不再接收字符,但是等遇到回车才结束;nextLine()
会接收一行所有字符,包括空格和回车。nextLine()
接收到next()
未接收的字符asd
和回车,直接结束,并打印,未进入等待输入状态。
6、测试close()
import java.util.Scanner;
public class TestScanner{
public static void main(String[] args){
//1.导包
//2.创建某个类型的变量|引用
Scanner sc = new Scanner(System.in);
//3.使用功能
String s = sc.next();
System.out.println(s);
//测试nextLine()
s = sc.nextLine();
System.out.println(s);
sc.close();
//创建某个类型的变量|引用
Scanner reader = new Scanner(System.in);
String str = reader.nextLine(); //抛异常
System.out.println(str);
}
}
注意:一定在Scanner类使用完毕以后再关闭,否则重新开启也无法使用。
三、Random
1、[0,max]
//[0,5]
i=ran.nextInt(6);
//注:引用.nextInt(max+1)
2、[min,max]
//[3,5]
i=ran.nextInt(5-3+1)+3;
//注:引用.nextInt(max-min+1)+min
练习:
import java.util.Random;
public class Random11{
public static void main(String[] args){
//1.导包
//2.创建Random类型的变量|引用
Random ran=new Random();
//3.使用功能
int i=ran.nextInt();
//[0,5]
i=ran.nextInt(6);
System.out.println(i);
//[3,5]
i=ran.nextInt(5-3+1)+3;
System.out.println(i);
double d=ran.nextDouble()+3;
System.out.println(d);
//三个数求大小
int a=5;
int b=10;
int c=8;
int max=a>b ? a : b;
max=max>c ? max : c;
System.out.println(max);
max=a>b & a>c ? a : (b>c ? b : c);
System.out.println(max);
}
}
四、选择结构
1、if语句
单分支|单选泽
if(条件表达式){
语句体;
}
//单选
if(false)
System.out.println("现在5点了,还有半个小时就下课了!!!哈哈哈~~~");
System.out.println("if语句结束以后");
- 条件表达式必须值为boolean类型的表达式
- 如果条件表达式结果为false,就不执行跳过整个if结构
- 如果条件表达式结果为true,执行{}中的语句体
双分支|双选择
if(条件表达式){
语句体1;
}else{
语句体2;
}
//双选
int a=0;
if(a>0){
System.out.println("a>0");
}else{
if(a==0){
System.out.println("a=0");
}else{
System.out.println("a<0");
}
}
多分支|多选择:
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}
....
else{
以上条件都不满足执行的内容
}
//多选择
if(a>0)
System.out.println("a>0");
else if(a==0)
System.out.println("a=0");
else
System.out.println("a<0");
- 无论是多选还是单选,双选,只要语句体只有1句,前后的{}可以省略,不推荐使使用,写上{}有利于后期增加语句体。
2、switch
语法
switch语句:定值判断
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
....
default:
语句体n;
break;
}
练习
public static void main(String[] args){
String str="紫灯";
switch(str){
case "红灯":
System.out.println("红灯停!");
break;
case "绿灯":
System.out.println("绿灯行!");
break;
case "黄灯":
System.out.println("黄灯等一等!");
break;
default:
System.out.println("请输入合格的灯(红灯、绿灯、黄灯)!!");
break;
}
//default的位置可以改变,不写break会发生case穿透
switch(str){
default:
System.out.println("请输入合格的灯(红灯、绿灯、黄灯)!!");
break;
case "红灯":
System.out.println("红灯停!");
case "绿灯":
System.out.println("绿灯行!");
case "黄灯":
System.out.println("黄灯等一等!");
break;
}
}
3、注意事项
- switch的
表达式|变量
支持类型:byte
,short
,int
,char
,枚举
和字符串
case
:表达式的结果与case后的值进行判断,如果相同,执行对应的语句体;break
:结束这个switch语句,如果没有break会发生case穿透default
: 与else作用一致,以上case都不满足条件,执行default中的语句体- 可以在switch语句中的任何位置,改变位置注意break的问题
- if语句可以做区间判断,也可以做定值判断,switch 只能做定值判断