Day4:录入、if、switch
程序中的执行流程:
-
顺序性:从main方法出发,一行一行往下执行
-
选择性:分支语句,具有选择性[马上学习]
-
循环性:循环语句,重复的执行某些代码[明天学习]
1.控制台录入
控制台录入: 用于接收从控制台中输入的值
步骤:
-
实例化Scanner对象
-
调用方法接收录入的值; 方法有:nextInt,next(常用)
public class Console {
public static void main(String[] args) {
Scanner sc = new Scanner();
System.out.print("请输入一个整数:"); //print:打印不换行
int num = sc.nextInt(); //阻塞方法 接收一个整数值 3
//InputMismatchException: 录入整数,如果输入其他的则会报异常
System.out.println(num*2); //6
sc.close();
String s = sc.next(); //接收一个字符串的值
System.out.println("值为:"+s);
s.close();
double d = sc.nextDouble(); //接收double类型的值
System.out.println("小数值为:"+d);
d.close();
char c = sc.next().charAt(0); //获取字符串的第一个字符,下标从0开始
System.out.println(c);
c.close();
2.iF分支语句
- 单分支结构:
if(关系表达式){
语句体;
}
执行流程:如果关系表达式成立,则执行语句体
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score>=60) {
System.out.println("请全班吃饭");
}
- if双分支结构:if.else
if(关系表达式){
语句体1:
}else{
语句体2:
}
执行流程:if关系表达式成立则执行语句体1,否则执行语句体2
System.out.println("输入一个年份");
Scanner input = new Scanner(System.in);
int y = input.nextInt();
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
System.out.println("是闰年");
} else {
System.out.println("是平年");
}
input.close();
- if多分支结构:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}...
else if(关系表达式n){
语句体n;
}else{//可有可无
语句体;
}
-
不含嵌套
//不含嵌套 System.out.println("请输入您的成绩"); Scanner sc = new Scanner(System.in); int score = sc.nextInt(); if (score >= 90 && score <= 100) { System.out.println("A"); } else if (score >= 60 && score < 90) { System.out.println("B"); } else if (score >= 0 && score < 60) { System.out.println("C"); } else { System.out.println("您的输入的分数不合法!"); } sc.close();
注意:多分支的判断规则要么从小到大,要么从大到小
-
if嵌套1:在if判断中,又包含if
System.out.println("请输入您的成绩"); Scanner sc = new Scanner(System.in); int score = sc.nextInt(); if (score>=0&&score<=100) { if (score==100) { System.out.println("恭喜满分"); }else if (score>=90) { System.out.println("优秀"); //相比上面多分支结构,此处对分支判断进行了优化 }else if (score>=60) { System.out.println("及格"); }else if (score>=0) { System.out.println("不及格"); } }else{ System.out.println("您输入的成绩不合法"); } sc.close();
-
if嵌套2:在if嵌套判断外,又有if嵌套判断
Scanner input = new Scanner(System.in); System.out.println("天气如何,1晴天,2霾"); int weather = input.nextInt(); if (weather == 1) { System.out.println("今天是个好天气,1去逛公园,2去逛街"); int flag = input.nextInt(); if (flag == 1) { System.out.println("和女朋友去逛公园"); } else if (flag == 2) { System.out.println("和女朋友去逛街"); } else { System.out.println("error input"); } } else if (weather == 2) { System.out.println("今天天气不好,1在家看电影,2在家打游戏"); int flag = input.nextInt(); if (flag == 1) { System.out.println("和女朋友在家看电影"); } else if (flag == 2) { System.out.println("和女朋友在家打游戏"); } else { System.out.println("error input"); } } else { System.out.println("error input"); } input.close();
3.switch分支语句
-
switch语句有关规则
- 表达式的返回值必须是下述几种类型之一:int,byte,char,short,jdk1.7之后支持String;
- case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
- default子句是可选的;
- break语句用在执行完一个case分支后使程序调出switch语句块,如果case后面没有写break则直接往下面执行!
- case后面的执行体可以写{}也可以不写{}
switch(变量){ case 值1:语句体1; break; //跳出witch语句 case 值2:语句体2; break; ... case 值n:语句体n; break; default:语句体;n+1; break; }
System.out.println("请输入周一到周五(1~5)");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
System.out.println("food1");
break;
case 2:
System.out.println("food2");
break;
case 3:
System.out.println("food3");
break;
case 4:
System.out.println("food4");
break;
case 5:
System.out.println("food5");
break;
default:
System.out.println("error input");
break;
}
- switch和if嵌套,以及case内定义变量
System.out.println("请输入1~7");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
System.out.println("今天是周一,比较堵,1乘公交,2坐地铁");
int method = input.nextInt();
if (method == 1) {
System.out.println("乘地铁");
} else if (method == 2) {
System.out.println("坐地铁");
} else {
System.out.println("其他出行方式");
}
break;
case 2:
int a = 20;
//在此处定义后在整个大括号内都可以使用不能再被定义
//即便该语句没有被执行,依旧已被定义
System.out.println("今天是周二");
System.out.println(a);
break;
case 3:
a = 10;
System.out.println("今天是周三");
System.out.println(a);
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;
default:
System.out.println("error input");
break;
}
input.close();
- 细节:在jdk7之后,switch的变量可以是String类
System.out.println("请输入四大天王姓名");
Scanner input = new Scanner(System.in);
String name = input.next();
switch (name) {
case "刘德华":
System.out.println("全能艺人");
break;
case "张学友":
System.out.println("歌神");
case "黎明":
System.out.println("帅");
case "郭富城":
System.out.println("舞王");
default:System.out.println("error input");
break;
input.close();
if和switch相比,if倾向于用在判断范围,switch倾向于用在等值判断中
4.局部变量
在main方法体或者参数中出现的变量都是局部变量
特点:
- 必须要先赋值,才能使用
- 作用域到定义处到方法体结束
- 在同一个方法中,不能定义重名变量
public class Test1 {
public static void main(String[] args) {//args 方法参数的局部变量
int a = 3;//在main方法体中定义的局部变量
System.out.println(a);
//int a;Duplicate local variable a:在同一个方法中,不能定义重名变量
}
//System.out.println(a);在此处则无法输出
}
作业
- 张三的Java成绩,大于80分,全班鼓掌
package com.qf.Day3HomeWork;
import java.util.Scanner;
public class d3_1 {
public static void main(String[] args) {
System.out.println("请输入张三的成绩");
Scanner input = new Scanner(System.in);
int score = input.nextInt();
if (score>=0&&score<=100) {
if(score>80) {
System.out.println("全班鼓掌");
}
}else {
System.out.println("error input");
}
input.close();
}
}
- 输入张三的Java和php成绩,都大于80分,全班鼓掌,否则鼓励
package com.qf.Day3HomeWork;
import java.util.Scanner;
public class d3_2 {
public static void main(String[] args) {
System.out.println("请输入张三的Java成绩");
Scanner input = new Scanner(System.in);
int JavaScore = input.nextInt();
System.out.println("请输入张三的php成绩");
int PhpScore = input.nextInt();
if (JavaScore>=0&&JavaScore<=100&PhpScore>=0&&PhpScore<=100) {
if (JavaScore>=80&&PhpScore>=80) {
System.out.println("全班鼓掌");
}else {
System.out.println("鼓励");
}
}else {
System.out.println("error input");
}
input.close();
}
}
- 考试成绩评测,大于等于80分良好,大于等于60分并小于80分中等,小于60分多加努力
package com.qf.Day3HomeWork;
import java.util.Scanner;
public class d3_3 {
public static void main(String[] args) {
System.out.println("请输入成绩");
Scanner input = new Scanner(System.in);
int score = input.nextInt();
if (score>=0&&score<=100) {
if(score>=80) {
System.out.println("良");
}else if(score>=60){
System.out.println("中");
}else {
System.out.println("多加努力");
}
}else {
System.out.println("error input");
}
}
}
- 输入会员积分及购物金额,根据积分的不同享受不同的折扣,并输出结账金额
x < 2000 9折
2000 ≤ x < 4000 8折
4000 ≤ x < 8000 7折
x ≥ 8000 6折
提示: 积分:3000 500*0.8=400
根据积分进行多分支判断
package com.qf.Day3HomeWork;
import java.util.Scanner;
public class d3_4 {
public static void main(String[] args) {
System.out.println("输入用户的会员积分");
Scanner input1 = new Scanner(System.in);
int credits = input1.nextInt();
if (credits<0) {
System.out.println("error input");
}else {
System.out.println("请输入用户购买金额");
Scanner input2 = new Scanner(System.in);
Double sum = input2.nextDouble();
if (credits<2000) {
System.out.println(sum*0.9);
}else if (credits>=2000&&credits<4000) {
System.out.println(sum*0.8);
}else if (credits>=4000&&credits<8000) {
System.out.println(sum*0.7);
}else if(credits>=8000){
System.out.println(sum*0.6);
}
}
}
}
- 输入数字,输出今天星期几
package com.qf.Day3HomeWork;
import java.util.Scanner;
public class d3_5 {
public static void main(String[] args) {
System.out.println("输入数字");
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
System.out.println("Monday");
break;
case 2:
System.out.println("Thuesday");
break;
case 3:
System.out.println("Wednesday");
break;
case 4:
System.out.println("Thursday");
break;
case 5:
System.out.println("Friday");
break;
case 6:
System.out.println("Saturday");
break;
case 7:
System.out.println("Sunday");
break;
default:System.out.println("error input");
break;
}
input.close();
}
}