运算符
0 % 5 = 0
3 % 5 = 3
4 % 6 = 4
-2 % 5 = -2
字符串连接运算
- 数字计算
‘+’号的两端是数字(含字符类型) - 字符串连接
‘-‘号的一端是字符串的时候,按照字符串连接计算
一种运算符有多种功能的现象,称为“运算符重载”,Java中只有“+”是重载的运算符。
注意:
1. 计算次序, 从左到右计算
2. 注意 字符不是字符串,字符按照数值计算!!!
案例:
int a = 100;
//String 代表一串字符: 字符串
String str = "a=" + a;
// 计算过程:a 转换为 “100”
// 将 "a=" 与 "100" 连接
// 结果 "a=100"
System.out.println(str); //"a=100"
/*
* 常见问题
* 1. 计算次序, 从左到右计算
* 2. 注意 字符不是字符串,字符按照
* 数值计算!!!
*/
String s1 = "A"+1+2+3+"";
String s2 = 1+2+3+"A"+"";
System.out.println(s1);//A123
System.out.println(s2);//6A
String s3 = 'A'+1+2+3+"";
System.out.println(s3);//
三目运算(条件表达式)
根据条件得到不同的结果
案例:
/*
* 分页总数计算:
* 根据总行数rows,每页4行,计算总页数
*/
Scanner in = new Scanner(System.in);
System.out.print("输入总页数:");
int rows = in.nextInt();
// 判断是否整除
int pages= rows%4==0 ? rows/4 : rows/4+1;
System.out.println(pages); //6
案例二:判断年份是否为闰年
Scanner in = new Scanner(System.in);
System.out.print("公元年份:");
int year = in.nextInt();
boolean leap=((year%4==0)&&!(year%100==0))||
(year%400==0);
System.out.println(leap);
分支流程控制
顺序流程控制
编写一个收银柜台收款程序,根据商品单价、购买数量以及收款金额计算并输出应收金额和找零。
案例:
//读取用户输入信息:单价,数量,金额
Scanner in = new Scanner(System.in);
System.out.print("请输入单价:");
double price = in.nextDouble();
System.out.print("输入数量:");
double num = in.nextDouble();
System.out.print("输入金额:");
double pay = in.nextDouble();
//计算:1. 计算总价 2.计算找零
double total = price * num;
double sub = pay - total;
//输出计算结果
System.out.println("商品金额:"+total);
System.out.println("已支付:"+pay);
System.out.println("找零:"+sub);
if语句
语法:
if(条件表达式){
语句块
}
当 条件表达式 为true的时候执行 语句块
需求:如果总价大于500就打8折
案例:
//如果总价 大于 500 就打8折
if(total >= 500){
//System.out.println(total);
//total = total * 0.8;//总价 打8折
total *= 0.8;
}
if …… else 语句
原理:
需求:考虑程序异常情况,如:收款金额小于应收金额若收款金额大于等于应收金额,则计算找零后输出;若收款金额小于应收金额,输出错误提示信息。
案例:
if(pay >= total){
//正常支付
double sub = pay-total;
System.out.println("商品金额:"+total);
System.out.println("已经支付:"+pay);
System.out.println("找零:"+sub);
}else{//金额不足
//拒绝支付
System.out.println("金额不足!");
}
多路分支
提示:对路分离语句实际上是if语句嵌套的一种简化形式
案例:根据学员的成绩输出等级:
- A(成绩大于等于90分);
- B(成绩小于90分且大于等于80分);
- C(成绩小于80分且大于等于60分);
- D(成绩小于60)。
Scanner in = new Scanner(System.in);
System.out.print("输入分数:");
int score = in.nextInt();//分数
//多路分支语句(if语句嵌套)
if(score>=90){//90以上
System.out.println("A");//A 级别
}else if(score>=80){//90到80之间
System.out.println("B");
}else if(score>=60){//80到60之间
System.out.println("C");
}else{
System.out.println("D");
}
if(总价<50){
//...
}else if(总价<200){
//...
}else if(总价<500){
//...
}else{
//...
}
switch case 语句
switch:开关 case:情况
多路分支语句,特点是根据整数进行分支。
break用于跳出switch结构
/*
* 利用switch case 对路分支处理
* 分数等级
*/
//从控制台读取分数
Scanner in = new Scanner(System.in);
System.out.print("输入分数:");
int score = in.nextInt();
switch(score/10){//10 9 8 7 6 5 .. 0
case 10: //100
case 9: //99 ~ 90
System.out.println("A"); break;
case 8: //89 ~ 80
System.out.println("B"); break;
case 7: //79 ~ 70
case 6: //60 ~ 60
System.out.println("C"); break;
default: //59 ~ 0
System.out.println("D");
}
经典案例:
/*
* 菜单解释器
*/
//1 显示菜单信息
System.out.println("请选择功能");//...
System.out.println("1. 添加学生");
System.out.println("2. 删除学生");
System.out.println("3. 登记分数");
System.out.println("4. 批量导入");
System.out.println("0. 退出");
System.out.print("请选择(0-4):");
//2 等待用户的输入
Scanner in = new Scanner(System.in);
int n = in.nextInt();
//3 解释用户的输入
switch(n){
case 1://解释了添加学员的功能
System.out.println("添加学员");
break;
case 2://解释删除学生
System.out.println("删除学员");
break;
case 3:
System.out.println("输入分数");
break;
case 4:
System.out.println("批量导入");
break;
case 0:
System.out.println("退出!");
break;
default:
System.out.println("错误命令");
}
重点:区别 switch 与 if else if …
- switch 只能根据整数条件进行分支
if else if else 可以根据任意条件进行多路分支。switch使用范围没有 if 广泛! - switch 的运算性能好于 if else
如果分支条件是整数,一定使用switch case。