文章目录
运算符
算术运算符
需要两个操作数参与,如果由浮点数参与运算,结果为浮点型。
符号 | 作用 | 说明 |
---|---|---|
+ | 加 | 如果两个操作数都是数值型的数据,+用于计算。如果两个操作数有一端是字符串,+用于拼接字符串。 |
- | 减 | 只能用于数值型数据。 |
* | 乘 | 只能用于数值型数据。 |
/ | 除 | 只能用于数值型数据。如果两个整数相除,结果只保留整数部分(商)。 |
% | 模 | 只能用于数值型数据。商一定是整数。 |
注意
- 如果同时多个符号一起使用,遵循数学中的四则运算规则,先乘除,后加减
- 运算时最终结果的数据类型,以所以参与运算的操作数中所占字节最大的类型为准
关系运算符
需要两个操作数参与
符号 | 作业 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于 |
== | 等于 |
注意
-
==用于判断相等,=用于赋值
-
==用于比较两个原始类型的值或引用类型的内存地址
-
关系运算的结果为true/false
逻辑运算符
符号 | 作业 | 说明 |
---|---|---|
&& | and与 | 符号两端需要两个表达式,判断如果都为true,整体结果则为true,如果有一段姐夫哦为false整体结果为false。 |
|| | or或 | 符号垄断需要两个表达式,判断如果都为false,整体结果则为false,如果有一端结果为true,整体结果为true。 |
! | not非 | 是一个弹幕运算符,只有一个表达式参与运算。“!表达式”不是对原表达式的结果取相反值。 |
补充:位运算符
符号 | 作业 |
---|---|
& | 按位与。计算的结果与&&相同,但过程不同。符号两端的表示都会执行判断。 |
| | 按位或。计算的结果与||相同,但过程不同。符号两端的不是都会执行判断。 |
^ | 按位异或。将操作数转换为二进制后,按位比较,如果相同结果为0,不同结果为1,最终二进制结果转换为十进制。 |
>> | 按位右移。将第一个操作数转换为二进制后,向右移第二个这才是对于的位数,再将结果装换位十进制。 |
<< | 按位左移。 |
注意
- &&和||也称为短路运算。如果能通过第一个表达式觉得最终的结果,则不用判断第二个表达式。
- 通常情况下,使用&&和||提高代码执行效率。
赋值和复合赋值运算符
符号 | 作用 |
---|---|
= | 赋值运算符。将符号右侧的内容赋值给符号左侧的变量。 |
+= | 复合赋值运算符。i+=3;相当于i=i+3; |
-= | i-=1; == |
*= | |
/= | |
%= |
注意
复合赋值运算的流程是:
将符号两端的整体进行对应的算数运算后,将结果赋值给符号左侧的变量中。
自增自减运算符
只有一个操作数参与运算,称为单目运算符
符号 | 作用 |
---|---|
++ | 将结果加一 |
– | 将结果减一 |
注意
- a++或++a相当于a+=1或a=a+1。–同理
- 如果++或–独立成行使用,无论符号在前在后,都将结果+1或-1
- 如果++或–不是单独成行
- 符号再去,先+1或-1计算后在使用值
- 符号灾后,先使用值后在+1或–1计算
条件运算符
三目运算符,有三个操作数参与。是一个简化版的双分支条件语句。
表达式1?表达式2:表达式3
首先运算表达式1,如果结果为true,执行问号后的表达式2; 如果结果为false,执行冒号后的表达式3。 整个表达式的最终结果为表达式2或表达3。
三位一体,运算后的值为其中范围最大的值
((x>4) ? 99.9 :9)
其结果为:9.0
运算符的优先级
小括号>>单目运算符>>算术运算符>>关系运算符>>逻辑运算符>>条件运算符>>赋值/复合赋值运算符
多种数据类型参与运算,其结果以字节最大的为准。
条件语句
if语句
- 单分支if语句
如果一件事情满足则执行
if(判断条件){//布尔值条件
执行代码
}
- 双分支
if(){
}else{
}
- 多分支
if(){
}else if(){
}else if(){
}else{
}
- if嵌套
if(){
if(){
}
}
if嵌套不要嵌套太多层,会导致代码可读性变低
if嵌套可以改造成if(){return}形式,让程序满足条件时,不再执行后续内容。
注意
if或else后的大括号可以不写,但只能跟一句执行语句。
switch语句
开关语句
如果一个变量的值能够列举出时,使用switch语句更为简洁。
变量不能为Long类型
switch(变量){
case 1:
break;
case 2:
break;
case 3:
break;
default:
break;
}
注意
switch小括号中的变量只能是非long的整型、字符型char、字符串String和枚举类型
小括号中的变量类型要与case后的值的类型相匹配
如果有某个case后的内容和变量值匹配,执行case后的代码,如果没有任何case匹配,执行 default后的代码
break和default可以省略。如果不写break,在某个case匹配时,执行玩相应的代码后继续执行后 续case后的代码,直到遇到break或没有代码为止
如果多个case后执行的内容一致,可以省略break,将统一要做的代码放在最后的case后
if语句与switch语句的选择
- 如果条件能够一一列举出来时,使用switch语句更为简洁
- 如果条件是一个范围是,中年使用if语句,如大于100
- switch语句可以改为if语句,if语句不一定能改为switch语句
if语句和switch语句中的return关键字
- if语句中可以使用return关键字不在执行后续的代码。可以使用这一点将原本的嵌套改成if-return的形式。
int a=3,b=4,c=5;
if(a+b<=c || a+c<=b || b+c<=a){
System.out.println("不能组成三角形");
return;
}
if(a==b && b==c){
System.out.println("等边");
}else if(a==b || a ==c || b==c){
System.out.println("等腰");
}else{
System.out.println("普通");
}
- switch语句中,也可以使用return,但会造成switch语句之后的代码不执行,所以一般不在switch 语句中使用return;
作业
打印如下菜单
请选择功能:
1:注册
2:登录
3:退出
输入:1
进入注册功能
/**
* 请选择功能:
* 1:注册
* 2:登录
* 3:退出
* 输入:1
* 进入注册功能
*/
System.out.println("请选择功能:\n" +
"1:注册\n" +
"2:登录\n" +
"3:退出\n");
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
switch (a){
case 1:
System.out.println("进入注册界面");
break;
case 2:
System.out.println("进入登录页面");
break;
case 3:
System.out.println("您已退出");
break;
}
输入一个四位号码,判断个位和百位之和
8的倍数,一等奖
5,二等奖
3,三等奖
其他,谢谢参与
如输入1234,三等奖
int a = 0;
Scanner scanner = new Scanner(System.in);
while (a<999||a>10000) {
System.out.println("输入一个四位号码");
a = scanner.nextInt();
}
int ge = a%10, bai = a/100%10, sum=ge+bai;
if (sum%8==0) System.out.println("一等奖");
else if (sum%5==0) System.out.println("二等奖");
else if (sum%3==0) System.out.println("三等奖");
else System.out.println("谢谢参与");
输入年份和月份,输出共多少天
/**
* 输入年份和月份,输出共多少天
* 1、3、5、7、8、10、12是大月,有31天;2月平年是28天,闰年是29天;
* 4、6、9、11是小月,有30天。
*/
Scanner scanner = new Scanner(System.in);
System.out.print("输入年份和月份:");
String a = scanner.nextLine();;
String out="";
String[] arr = a.split("\\s+");
while (Integer.parseInt(arr[1])>12||Integer.parseInt(arr[1])<1){
System.out.print("输入年份和月份:");
a = scanner.nextLine();
arr = a.split("\\s+");
}
switch (Integer.parseInt(arr[1])){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
out = "31";
break;
case 4:
case 6:
case 9:
case 11:
out = "30";
break;
case 2:
if (isRunnian_v2(Integer.parseInt(arr[0]))) out = "29";
else out = "28";
break;
}
System.out.println(arr[0] + "年的"+ arr[1] +"月有" + out + "天");
isRunnian_v2()
public static boolean isRunnian_v2(int year){
boolean a = false;
a = (year%4==0&&year%100!=0)||year%400==0?true:false;
return a;
}
1000~1999中有两个数字相同的次数(1个数字)
/**
* 1000~1999中有两个数字相同的次数(1个数字)
* 分析有三种形式
* 1100
* 1001
* 1010
* 每种形式的1都不能与0相同
* 1100 一位!=三位&&一位!=四位 && 二位!=三位&& 二位!=四位
*/
int num=0;
for (int i = 1000; i < 2000; i++) {
int ge = i%10;
int shi = i/10%10;
int bai = i/100%10;
int qian = i/1000;
if(qian==bai&&shi!=ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || qian!=bai&&shi==ge&&qian!=shi&&qian!=ge&&bai!=shi&&bai!=ge || bai==shi&&qian!=ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || bai!=shi&&qian==ge&&bai!=qian&&bai!=ge&&shi!=qian&&shi!=ge || qian==shi&&bai!=ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge || qian!=shi&&bai==ge&&qian!=bai&&qian!=ge&&shi!=bai&&shi!=ge){//个位与十位相同
num++;
System.out.print(i+" ");
if(num%30==0) System.out.println("");
}
}
System.out.println(num);