Day04
一、转义字符
具有特殊意义的字符本身
" 表示一个双引号字符
’ 表示一个单引号字符
\ 表示一个斜杠字符
\n 表示换行
\t 水平制表
二、常量
在程序执行过程中不可发生改变的量
分类:
1.数字字面量:程序中出现的数字
整数数字默认int类型
小数数字默认double类型2.字面值常量:使用双引号括起来的内容
3.使用final(最终的)修饰变量
扩展命名规范:
大驼峰命名法(帕斯卡命名法):
作用:类
理解:所有单词首字母大写
ps:public class StudentManagerSystem{}小驼峰命名法:
作用:方法、变量
理解:除了第一个单词,其余单词首字母大写
ps:int curCapacity = 100;常量命名法:
作用:常量
理解:全部单词大写,单词之间使用下划线隔开
ps:final int MAX_CAPACITY = 10000;
三、Java执行语句简介
分类:
1.顺序语句:方法里的代码从上往下执行
2.分支语句:条件成立就执行某个功能
2.1 if分支
2.2 switch分支3.循环语句:条件成立就重复性的执行某个功能
3.1 for循环
3.2 while循环
3.3 do-while循环4.特殊的流程控制语句
4.1 break
4.2 continue
4.3 return
4.4 label
四、if分支
语法结构1:
if(表达式){
…代码块…
}理解:表达式的结果必须是boolean类型
true - 执行代码块
false- 跳过if分支,执行if以外的代码 if可以判断区间,也可以判断复杂条件,只要是表达式的结果是boolean就ok
例如:
if((javaScore>98 && musicScore>80) || (javaScore==100 && musicScore>70)){ ...; }
语法结构2:
if(表达式){
…代码块…
}else{
…else代码块…
}理解:
表达式的结果必须是boolean类型
true - 执行代码块
false- 执行else代码块 二选一的情况下使用
语法结构3:
语法结构:
if(表达式1){
…代码块1… }else if (表达式2){
…代码块2…
}else if (表达式n){
…代码块n…
}else{
…else代码块…
}
理解:
从上往下判断表达式,哪个表达式先为true,就执行对应的代码块,如果都不为true就执行else代码块
表达式的结果必须是boolean类型
true - 执行代码块
false- 执行else代码块 多重if分支在多选一的情况下使用
if结构里可以无限嵌套,但嵌套最好不要超过3层,嵌套越多可读性越差。
案例:
import java.util.Scanner;
public class Test{
/**
运动会,百米赛跑跑入16秒内的学生有资格进决赛,
根据性别分别进入男子组和女子组。
*/
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入成绩:");
double score = scan.nextDouble();
if(score>=0 && score<16){
System.out.println("请输入性别:");
String sex = scan.next();
if(sex.equals("男")){//判断两个字符串的内容是否相同(sex和"男")
System.out.println("恭喜进入到男子组决赛");
}else if(sex.equals("女")){//判断两个字符串的内容是否相同(sex和"女")
System.out.println("恭喜进入到女子组决赛");
}else{
System.out.println("性别异常");
}
}else if(score>=16){
System.out.println("你被淘汰了,重在参与");
}else{
System.out.println("成绩异常");
}
}
}
五、switch分支
语法结构:
switch(表达式){
case 值1:
…代码块1…
break;
case 值2:
…代码块2…
break;
case 值n:
…代码块n…
break;
default:
…default代码块…
break;
}理解:
表达式的结果分别给值1、值2、值n比较,哪个相同就执行对应的代码块
如果都不相同就执行default代码块
default代码块根据需求可写可不写
break表示跳出当前分支语句 switch是比较表达式的结果和case后面的值是否相同
深入
/*面试题:
case的值可以相同吗?
不允许相同
default可以省略吗?
可以省略(相当于多重if里的else{})
break可以省略吗?
可以
default的位置一定要在最后吗?
不一定,但是为了可读性最好放在最后
表达式值的类型可以是什么?
byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)
表达式值为什么只支持byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)?
switch底层只识别int值
byte --> int 自动转型
short -> int 自动转型
int --> int 直接使用
char --> int 获取字符的码值
String-> int 获取字符串的hash码(获取字符串中多个字符的码值 + 散列算法,算出来的结果就是hash值)
枚举 --> int 获取枚举对象的编号
*/
/**
案例:输入年和月,输出当月的天数
分析:
1、3、5、7、8、10、12月 - 31天
4、6、9、11月 - 30天
2月 - 平年28天、闰年29天
年份被4整除并且不能被100整数 或者 被400整除的年份就是闰年
*/
public static void main(String[] args){
//功能和展示分离思想
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
int day = 0;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
day = 31;
break;
case 4:case 6:case 9:case 11:
day = 30;
break;
case 2:
if(year%4==0 && year%100!=0 || year%400==0){
day = 29;
}else{
day = 28;
}
break;
}
System.out.println(year + "年" + month + "月的天数为:" + day + "天");
}
知识点:if vs switch
表达式的区别:
if:boolean类型
switch:byte、short、int、char、String(JDK1.8)、枚举(JDK1.5)
应用场景的区别:
if:判断区间、判断复杂条件
switch:判断单个值是否相同
六、for循环
语法规则:
for(表达式1;表达式2;表达式3){
…代码块/循环体…
}理解:
表达式1 - 初始化变量
表达式2 - 判断条件
表达式3 - 更新变量执行步骤:
1.初始化变量
2.判断条件 - 结果必须是boolean类型
2.1 true - 执行代码块,更新变量,重复第2个步骤
2.2 false - 直接跳出循环体
/*
for循环变形记:
int i = 0;
for(;i<5;){
System.out.println("用良心做教育 -- " + i);
i++;
}
System.out.println(i);
死循环:
for(;;){
System.out.println("死循环");
}
for(;true;){
System.out.println("死循环");
}
伪死循环:
for(int i = 0;i>=0;i++){
System.out.println("伪死循环");
}
*/
小结:
1.初始化变量不一定从0开始
2.更新变量不一定++
3.在for循环中声明的变量只能在当前for循环里使用
4.for循环里的更新变量中编写i++和++i没有区别
for循环嵌套
/*需求1:打印以下图形
****
****
****
*/
for(int i = 0;i<3;i++){
for(int j = 0;j<4;j++){
System.out.print("*");
}
System.out.println();
}
/*需求2:打印以下图形
*
**
***
****
*****
*/
for(int i=0;i<5;i++){
for(int j=0;j<i+1;j++){
System.out.print("*");
}
System.out.println();
}
/* 需求3:打印以下图形
*
**
***
****
*****
*/
for(int i=1;i<=5;i++){
for(int j=1;j<=5-i;j++){
System.out.print(" ");
}
for(int k=1;k<=i;k++)
System.out.print("*");
System.out.println();
}
/* 需求4:打印以下图形
*****
****
***
**
*
*/
for(int i=0;i<5;i++){
for(int j=0;j<5-i;j++){
System.out.print("*");
}
System.out.println();
}
/* 需求5:打印以下图形
*****
****
***
**
*
*/
for(int i=1;i<=5;i++){
for(int j=1;j<=i-1;j++){
System.out.print(" ");
}
for(int k=1;k<=6-i;k++)
System.out.print("*");
System.out.println();
}
/* 需求6:打印以下图形
*
***
*****
*******
*/
for(int i=1;i<=4;i++){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++)
System.out.print("*");
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
System.out.println();
}
/* 需求7:打印以下图形
*
* *
* *
*******
*/
for(int i=1;i<=4-1;i++){
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
System.out.print("*");
for(int j=1;j<=2*i-3;j++){
System.out.print(" ");
}
if(i!=1){
System.out.print("*");
}
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
System.out.println();
}
for(int k=1;k<=2*4-1;k++){
System.out.print("*");
}
/* 需求8:打印以下图形
*******
*****
***
*
*/
for(int i=1;i<=4;i++){
for(int j=1;j<=i-1;j++){
System.out.print(" ");
}
for(int k=1;k<=9-2*i;k++)
System.out.print("*");
for(int j=1;j<=i-1;j++){
System.out.print(" ");
}
System.out.println();
}
/* 需求9:打印以下图形
*******
* *
* *
*
*/
for(int k=1;k<=2*4-1;k++){
System.out.print("*");
}
System.out.println();
for(int i=2;i<=4;i++){
for(int j=1;j<=i-1;j++){
System.out.print(" ");
}
System.out.print("*");
for(int j=1;j<=7-2*i;j++){
System.out.print(" ");
}
if(i!=4){
System.out.print("*");
}
for(int j=1;j<=4-i;j++){
System.out.print(" ");
}
System.out.println();
}
/* 需求10:九九乘法表
正三角:*/
for(int i = 1;i<=9;i++){
for(int j = 1;j<=i;j++){
System.out.print(j + "x" + i + "=" + (i*j) + "\t");
}
System.out.println();
}
/* 倒三角:*/
for(int i = 1;i<=9;i++){
for(int k = 1;k<i;k++){
System.out.print("\t");
}
for(int j = i;j<=9;j++){
System.out.print(i + "x" + j + "=" + (i*j) + "\t");
}
System.out.println();
}
上次练习答案
//1.
import java.util.Scanner;
public class Work01{
/**
1.键盘输入两个数字,获取出最大值
*/
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数字:");
int a = scan.nextInt();
System.out.println("请输入第二个数字:");
int b = scan.nextInt();
int max = (a>b)?a:b;
System.out.println("最大值为:" + max);
}
}
//2.
public class Work02{
/**
2.用最有效率的方式计算出4*8的结果
考点:位运算
*/
public static void main(String[] args){
System.out.println(4<<3);
}
}
//3.
public class Work03{
/**
3.int a = 21,获取出(a++) + (--a) * (a+=2)的结果
*/
public static void main(String[] args){
int a = 21;
int b = (a++) + (--a) * (a+=2);
//a - 23
//b - 21 + 21 * 23
System.out.println(b);//504
}
}
练习
- 某朋友说,如果存款超过100万,则入手宝马X5,否则超过50万,则入手奥迪A6,否则超过20万,则入手比亚迪,否则超过10万则玩玩极品飞车游戏,请为他编写一个购车选择程序,根据输入的金额,提示可以购买的车型。
- 设计一个考试奖励神器,根据录入学员的分数x给予奖励,如果分数x小于等于80分的则不予奖励并罚一个iphone6s,如果分数81<=x<=90则奖励一个iphone4,如果分数91<x<=100则奖励一个iphone4,再奖励一个ipad
- 从键盘录入输入3 个数a,b,c,按从大到小进行输出
- 计算个人所得税,关乎大家的生计
要求使用程序实现个人所得税计算器,实现从键盘录入当月工资收入,输出应缴个人所得税。
工资个税的计算公式为:应纳税额=(工资薪金所得 -“五险一金”-扣除数)×适用税率-速算扣除数
扣除标准:个税按3500元/月的起征标准算
*我们此处简化五险一金,假设为0*,则
如果某人的工资收入为5000元,他应纳个人所得税为:(5000—3500)×3%—0=45(元)。
税率表如下:
5.张三为他的手机设定了自动拨号(switch)
按1:拨爸爸的号
按2:拨妈妈的号
按3:拨爷爷的号
按4:拨奶奶的号