01-Java语法基础(五)-知识
文章目录
一、条件分支语句 - if语句
1.1 格式一:
if(条件表达式){
代码块;
}
表示:如果条件表达式成立(结果为true)就会执行代码块,否则就不执行。
注意:
1.条件表达式-由关系运算符或者逻辑运算符组成的,结果为true或者false的表达式
2.当且仅当if语句里面只有一行代码时大括号可以省略,但不建议这样做。
1.1.1 案例:
题目:在招聘Java工程师时,要求两年工作经验以上且年龄超过 30 岁。
int age=35;
int workAge=10;
if(age>30&&workAge>2){
System.out.println("可以进入面试");
}
在上面案例中,age为35岁满足年龄超过30岁条件并且工作经验workAge为10满足工作经验两年以上的条件,因此最后运行的结果是 “可以进入面试”。
题目:如果买彩票中了500万就去买豪车
Scanner key = new Scanner(System.in);
System.out.println("今天买彩票有没有中500万?有Q1,没有Q2");
int answer = key.nextInt();//answer=2
if(answer==1){
System.out.println("我的账户有500万");
System.out.println("终于有钱了,买豪车去~");
}
System.out.println("该吃吃该喝喝该睡睡");
1.2 格式二
if(条件表达式) {
代码块1;
} else {
代码块2;
}
表示:如果条件标的式成立就执行代码块1,如果不成立执行代码块2
if(判断条件){
//如果符合条件执行的代码; 执行的代码块
System.out.println("条件为真时运行我"));
}else{
//如果不符合条件执行的代码块
System.out.println("条件为假时运行我"));
}
//这里的代码一定会被执行
System.out.println("if运行后一定会运行我"));
1.2.1 案例
题目:输入数字,判断这个数是奇数还是偶数
System.out.println("请输入要判断的数字:");
int number = key.nextInt();
if(number%2==0){
System.out.println(number+"是偶数");
}else{
System.out.println(number+"是奇数");
}
1.3 格式三:
if(条件表达式){
代码块1
}else if(条件表达式2){
代码块2
}... //这里很多else if
else{
代码块
}
表示:从上到下依次判断条件是否成立,如果成绩就执行对应代码块内容,
如果条件表达式都不成立就执行else中的代码;
注意:当一旦有条件表达式成立并执行代码后,整个if语句就会结束,无论后面条件表达式是否成立都不会再执行
1.3.1 案例:
题目:根据中奖的金额,判断买什么样的车
System.out.println("请输入要判断的数字:");
int number = key.nextInt();
if(number%2==0){
System.out.println(number+"是偶数");
}else{
System.out.println(number+"是奇数");
}
System.out.println("今天买彩票中了多少money?");
int money = key.nextInt();
if(money>=500) {
System.out.println("买兰博基尼");
}else if(money>=200 && money<500) {
System.out.println("买卡宴");
}else if(money>=50 && money<200) {
System.out.println("买奔驰");
}else if(money>0 && money<50) {
System.out.println("买奥迪");
}else {
System.out.println("再接再厉");
}
System.out.println("该吃该喝该睡");
1.4 格式四嵌套
对条件需要做进一步的过滤的时候
案例需求:找到年龄大于20岁,并且工资大于10000的人
public class SalaryTest{
public static void main(String args[]){
int age = 75;
if (age>20) {
if(salary>10000){
System.out.println("如意郎君!");
}else{
System.out.println("薪资不满足!");
}
}else{
System.out.println("年龄不满足!");
}
}
}
题目:输入年月,判断这个月有多少天
判断润年公式: year%40&&year%100!=0||year%4000
public class IFTest {
public static void main(String[] args) {
//定义扫描器
Scanner key = new Scanner(System.in);
//提示输入年份
System.out.println("请输入年份:");
//接收输入的年份
int year = key.nextInt();
//提示输入月份
System.out.println("请输入月份:");
int month = key.nextInt();
//定义变量,接收每个月的天数
int days = 0;
//如果是1,3,5,7,8,10,12 都是31天
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
//System.out.println(year+"年"+month+"月,一共有31天");
days = 31;
}else if(month==4||month==6||month==9||month==11){
//System.out.println(year+"年"+month+"月,一共有30天");
days = 30;
}else if(month==2){
//判断是否是润年
if(year%4==0&&year%100!=0||year%400==0){
//System.out.println(year+"年"+month+"月,一共有29天");
days = 29;
}else{
//System.out.println(year+"年"+month+"月,一共有28天");
days = 28;
}
}else{
System.out.println("请正确输入月份");
}
System.out.println(year+"年"+month+"月,一共有"+days+"天");
key.close();
}
}
二、分支结构-switch
2.1 格式:
switch(表达式expr){
case const1:
statement1;
break;
case const2:
statement2;
break;
… …
case constN:
statementN;
break;
default:
statement_dafault;
break;
}
- 表达式expr的值必须是下述几种类型之一:
int, byte, char, short,enum;java7之后可以是String,不能用boolean,long,float,double等.- case子句中的值const 必须是常量值(或final的变量),case中的值不能是一个范围
- 所有case子句中的值应是不同的,否则会编译出错;
- default子句是可选的(不必要)
- break语句用来在执行完一个case分支后使程序跳出switch语句块;否则会继续执行下去
注意:所有的 case 都不满足需求的时候 执行default中的内容 break 帮助跳出switch 语句的, 如果执行过程中 没有遇到 break 继续向下执行直到遇到break为止
public static void main(String[] args) {
String season = "summer";
switch (season) {
case "spring":
System.out.println("春暖花开");
break;
case "summer":
System.out.println("夏日炎炎");
break;
case "autumn":
System.out.println("秋高气爽");
break;
case "winter":
System.out.println("冬雪皑皑");
break;
default:
System.out.println("季节输入有误");
break;
}
}
2.2 案例:
题目:根据输入的年龄,输出判断目前所处的阶段
public class SwitchTest {
public static void main(String[] args) {
//控制台输入对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入您的年龄:");
int age=sc.nextInt();
if(age>110 || age<10 ){
System.out.println("为了您的健康,禁止前往测试:");
}
switch (age/10){
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 5:
System.out.println("知天命:《论语·为政》:五十而知天命。");break;
case 6:
System.out.println("花甲: 天干有十,地支十二,十天干和十二地支按照顺序搭配成六十个单位");break;
case 7:
System.out.println("古稀: 杜甫《曲江二首》:酒债寻常行处有,人生七十古来稀");break;
case 10:
System.out.println("期颐:《礼记·曲礼上》:百年曰期颐。");break;
default:
System.out.println("耄耋之年:年八十曰耊。字亦作耋。——东汉·许慎《说文》");
}
//衣服的大小码
System.out.println("请输入您的衣服大小:大码,中码,小码---");
String num=sc.next();
switch (num){
case "大码":
System.out.println("你选择的是大码");break;
case "中码":
System.out.println("你选择的是中码");break;
case "小码":
System.out.println("你选择的是小码");break;
default:
System.out.println("您选择码数不存在!");
}
}
}
题目:输入某年某月某日,判断这一天是这一年的第几天?
public class SwitchTest1 {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("请输入年份:");
int year = key.nextInt();
System.out.println("请输入月份:");
int month = key.nextInt();
System.out.println("请输入日期:");
int day = key.nextInt();
int sum = 0;
switch (month - 1) {
case 0: sum = 0;break;
case 1://31
sum = 31;break;
case 2://28
sum = 59;break;
case 3://31
sum = 90;break;
case 4:
sum = 120;break;
case 5://31
sum = 151;break;
case 6:
sum = 181;break;
case 7://31
sum = 212;break;
case 8://31
sum = 243;break;
case 9:
sum = 273;break;
case 10://31
sum = 304;break;
case 11://30
sum = 334;break;
}
if ((month > 2) && isLeap(year)) {
System.out.printf("这天是这年的第%d天", sum+day+1);//%f 小数 o八进制 x十六进制
}else {
System.out.printf("这天是这年的第%d天", sum+day);
}
}
//润年:29:四年一闰,百年不闰,四百年再闰 // 平年:28
private static boolean isLeap(int year) {
if ((year % 100 != 0 && (year % 4 == 0) || year % 400 == 0)) {
return true;
}
return false;
}
}
二、switch 和 if语句的对比
- 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几 种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。 也就是说,使用switch-case的,都可以改写为if-else。反之不成立。