Day07——用户交互Scanner、顺序结构、选择结构
# Day07——用户交互Scanner、顺序结构、选择结构## 用户交互Scanner
通过 Scanner 类来获取用户的输入。
创建 Scanner 对象的基本语法:
```java
import java.util.Scanner;
//导入 java.util 包下的 Scanner类
Scanner s = new Scanner(System.in);
//创建一个对象s,来获取用户输入
```
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext() 与 hasNextLine() 判断是否还有输入的数据。
例1:hasNext()、next()方法
```java
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()方法
```java
//例1第6~10行:
if(scanner.hasNextLine()){
//用hasNextLine()判断是否还有输入
String str = scanner.nextLine();
//使用nextLine()方法获取用户输入,并储存到字符串str
System.out.println(str);
}//输入: Hello World ; 输出: Hello World
```
两次输入相同,但输出却不同:
- next()方法必须有输入,遇到空格自动结束
- nextLine()方法以Enter为结束,因此可以输入空格,也可以没有任何输入
- 若要判断是否还有int或float等其他类型数据输入,则用hasNextInt()、nextInt()、hasNextFloat()、nextFloat()等。
【例3】输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果:
```java
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 选择结构
1. if 单选择结构:
```java
if(布尔表达式){
语句1;
}//布尔表达式为true时,执行语句1; 否则不执行
```
2. if 双选择结构:
```java
if(布尔表达式){
语句1;
}else{
语句2;
}//布尔表达式为true时,执行语句1; 否则执行语句2。
```
3. if 多选择结构:
```java
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以下不及格。
```java
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();
}
}
```
4. if 嵌套结构:
```java
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 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
```java
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穿透】
```java
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)表达式】
```java
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;
}
}
``` b站谁讲的?我看你记的笔记不错 不错,自己自学还是 参加培训的? zhhmok 发表于 2021-3-16 09:01
不错,自己自学还是 参加培训的?
自学的,主要看的b站的视频hhhhh,目前还在基础阶段 zhhmok 发表于 2021-3-18 18:56
b站谁讲的?我看你记的笔记不错
up名:遇见狂神说 哦,谢谢!你记得笔记确实跟我以前看的书有点不一样。
页:
[1]