Day07——用户交互Scanner、顺序结构、选择结构
用户交互Scanner
通过 Scanner 类来获取用户的输入。
创建 Scanner 对象的基本语法:
import java.util.Scanner;
//导入 java.util 包下的 Scanner类
Scanner s = new Scanner(System.in);
//创建一个对象s,来获取用户输入
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。
例1:hasNext()、next()方法
import java.util.Scanner; //导入 java.util 包下的 Scanner类
public class Scanner{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
//创建一个对象scanner,来获取用户输入
if(scanner.hasNext()){ //用hasNext()判断是否还有输入
String str = scanner.next();
//使用next()方法获取用户输入,并储存到字符串str
System.out.println(str);
}
scanner.close();//IO流的类会一直占用资源,需要手动关闭
}
}//输入: Hello World ; 输出: Hello
例2:hasNextLine()、nextLine()方法
//例1第6~10行:
if(scanner.hasNextLine()){
//用hasNextLine()判断是否还有输入
String str = scanner.nextLine();
//使用nextLine()方法获取用户输入,并储存到字符串str
System.out.println(str);
}//输入: Hello World ; 输出: Hello World
两次输入相同,但输出却不同:
【例3】输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
import java.util.Scanner;
public class Num{
public static void main(String[] args) {
double num = 0;
int i = 0;
Scanner s = new Scanner(System.in);
while(s.hasNextDouble()){
double digtal = s.nextDouble();
num += digtal;
i++;
}
System.out.println(i +"个数的和为:" + num);
System.out.println(i +"个数的平均数为:" + num / i);
s.close();
}
}//输入10 20 30 40 a
//输出4个数的和为:100.0 4个数的平均数为:25.0
顺序结构
顺序结构是最简单的算法结构,是Java的基本结构。
语句与语句之间、按从上到下的顺序进行。
选择结构
if 选择结构
-
if 单选择结构:
if(布尔表达式){
语句1;
}//布尔表达式为true时,执行语句1; 否则不执行
-
if 双选择结构:
if(布尔表达式){
语句1;
}else{
语句2;
}//布尔表达式为true时,执行语句1; 否则执行语句2。
-
if 多选择结构:
if(布尔表达式1){
语句1;
}else if(布尔表达式2){
语句2;
}else if(布尔表达式3){
语句3;
}else{
语句4;
}//布尔表达式1为true时,执行语句1; 否则判断布尔表达式2,若为true,执行语句2;否则判断布尔表达式3,若为true,执行语句3;否则执行语句4。
-
与嵌套结构区别
执行语句1的条件是,布尔表达式1为true;
>
> 执行语句2的条件是,布尔表达式1false,2为true;
>
> 执行语句3的条件是,布尔表达式1、2均为false,3为true;
>
> 执行语句4的条件是,布尔表达式1、2、3均为false。
【例】考试成绩100满分,80以上优秀,60到80良,60以下不及格。
import java.util.Scanner;
public class Demo{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int score = s.nextInt();
if(score == 100){
System.out.println("恭喜满分!");
}else if(score >= 80 && score < 100){
System.out.println("优秀!");
}else if(score >= 60 && score < 80){
System.out.println("表现良好");
}else if(score >= 0 && score < 60){
System.out.println("不及格,仍需努力。");
}else{
System.out.println("成绩格式错误!");
}
s.close();
}
}
-
if 嵌套结构:
if(布尔表达式1){
if(布尔表达式2){
语句1;
}else{
语句2;
}
}else{
语句3;
}
-
与if 多选择结构区别
执行语句1的条件是,布尔表达式1、2均为true;
>
> 执行语句2的条件是,布尔表达式1为true,2为false;
>
> 执行语句3的条件是,布尔表达式1为false。
switch 多选择结构
多选择结构还有一个实现方式就是switch case 语句。
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
switch(expression){
case value 1 :
//语句
break; //可有可无
case value 2 :
//语句
break; //可有可无
...
...
default : //可有可无
//语句
}
-
switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持 字符串 String 类型了。
-
switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
-
case 语句中的值的数据类型必须与变量的数据类型相同。
-
当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句【case穿透】,否则程序会继续执行下一条 case 语句,直到出现 break 语句。
-
switch 语句可以包含一个 default 分支,一般是最后一个分支。default 在 没有 case 语句的值和变量值相匹配 的时候执行。default 分支不需要 break 语句。
例1:【case穿透】
public static void main(String args[]){
int i = 1;
switch(i){
case 0:
System.out.println("0");
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
break;
default:
System.out.println("default");
}
}//输出1 2 3。【case穿透】
例2:【JDK7增加了字符串(String)表达式】
public static void main(String[] args) {
String name = "Crown";
switch (name) { //JDK7的新特性,表达式的内容可以是字符串。
case "明天也有晚霞嘛":
System.out.println("输入为:明天也有晚霞嘛");
break;
case "Crown":
System.out.println("输入为:Crown");
break;
default:
System.out.println("无法匹配");
break;
}
}