明天也有晚霞嘛 发表于 2021-3-16 00:15

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;
        }
}
```

zhhmok 发表于 2021-3-18 18:56

b站谁讲的?我看你记的笔记不错

zhhmok 发表于 2021-3-16 09:01

不错,自己自学还是 参加培训的?

明天也有晚霞嘛 发表于 2021-3-16 18:55

zhhmok 发表于 2021-3-16 09:01
不错,自己自学还是 参加培训的?

自学的,主要看的b站的视频hhhhh,目前还在基础阶段

明天也有晚霞嘛 发表于 2021-3-19 00:34

zhhmok 发表于 2021-3-18 18:56
b站谁讲的?我看你记的笔记不错

up名:遇见狂神说

zhhmok 发表于 2021-3-19 08:40

哦,谢谢!你记得笔记确实跟我以前看的书有点不一样。
页: [1]
查看完整版本: Day07——用户交互Scanner、顺序结构、选择结构