Java学习经验与总结(03)——键盘录入及流程控制语句

## 一 键盘录入的基本格式

  我们在初始使用Java阶段发现给的值都是给死的,不灵活,而我们为了让程序的数据更符合开发的数据,这时候我们就需要用键盘录入来实现它。 下来,我们说一下键盘录入的基本格式。

      1  导包

  格式:

import java.util.Scanner;

  位置:

在class上面。

  2  创建键盘录入对象

  格式:

Scanner sc = new Scanner(System.in);

      3    通过对象获取数据

  格式:

int x = sc.nextInt();

在IDEA中实际演示如下:

```java

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个整数");

        int i = sc.nextInt();

    }

}

```

我们也可以做一些键盘录入的案例来演示一下,例如比较三个数据的最大值:

```java

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        System.out.println("请输入你要比较的数");

        int i = sc.nextInt();

        Scanner sc1 = new Scanner(System.in);

        System.out.println("请输入你要比较的数");

        int j= sc.nextInt();

        Scanner sc2 = new Scanner(System.in);

        System.out.println("请输入你要比较的数");

        int a = sc.nextInt();

        int max= (i>j)?i:j;

        int max1=(max>a)?max:a;

        System.out.println("三个数的最大值是"+max1);

    }

```

##  二  流程控制语句

### 1 顺序结构语句

  1 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果 有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要通过控制语句的执行顺序来实现 我们要完成的功能。

    2 流程控制语句分为 顺序结构 选择结构和循环结构三种

    3 我们首先来了解的顺序结构语句是程序中最简单的最基本的流程控制,没有特定的语法结构

    通俗来说 就是前面的先执行,后面的后执行 从上往下 依次执行


![顺序结构语句流程图](https://img-blog.csdnimg.cn/2019121018343723.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaW9uYWdp,size_16,color_FFFFFF,t_70)

### 2 选择结构语句   

  选择结构 也被称为分支结构,不同于顺序结构而言,选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。   

  选择结构分为if语句和switch语句两种

#### (1)我们首先来谈if语句

1  if 语句的三种格式

  (1)if(比较表达式或者是boolean类型的值){

                语句体;

  }

    执行流程:

          先计算表达式中的值,看看返回的值是true还是false,如果是true,就执行语句体,如果是false,就不执行。

          我们来演示一下


```java

public class Mydemo1 {

    public static void main(String[] args) {

        if(2>1){

            System.out.println("语句体运行了");

        }

    }

}

```

(2)if(比较表达式){

          语句体1;

}else{

        语句体2;

}

  注意事项:else后面没有表达式,只有if后面有。

  执行流程:

    先计算表达式中的值,看看返回的值是true还是false,如果是true,就执行语句体1,如果是false,就执行语句体2。

    我们来演示一下

```java

public class Mydemo1 {

    public static void main(String[] args) {

        if(2>1){

            System.out.println("语句体1运行了");

        }

        else{

            System.out.println("语句体2运行了");

        }

    }

}

```

我们也可以结合上面的键盘录入来判断一个数是奇数还是偶数

```java

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner1 = new Scanner(System.in);

        System.out.println("请输入一个数字");

        int i  = scanner1.nextInt();

        if(i%2==0){

            System.out.println("这个数字是偶数");

        }

        else{

            System.out.println("这个数字是奇数");

        }

    }

}

```

(3)if(比较表达式1) {

语句体1;

}else if(比较表达式2) {

语句体2;

}else if(比较表达式3) {

语句体3;

}

...

else {

语句体n+1;

}

2    执行流程:

    先计算比较表达式1中的值,看看返回的值是true还是false,如果是true,就执行语句体1,if语句结束。如果是false,就接着计算比较表达式2看其返回值是true还是false,如果是true,就执行比较表达式2,if语句结束。如果是false,就接着计算比较表达式3看其返回值是true还是false,就这样一直循环,如果都是false ,就执行语句体 n+1。

    注意事项:当只有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。

    我们通过一个案例来演示一下

      键盘录入一个成绩并判断出输出成绩的等级

      90-100优秀

      70-90 良好

      60-70 及格

      0-60 不及格


```java

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner1 = new Scanner(System.in);

        System.out.println("请输入你的成绩");

        int i  = scanner1.nextInt();

        if(i>=90&&i<=100){

            System.out.println("优秀");

        }

        else if(i>=70&&i<90){

            System.out.println("良好");

        }

        else if(i>=60&&i<70){

            System.out.println("及格");

        }

        else if(i>=0&&i<60){

            System.out.println("不及格");

        }

        else{

            System.out.println("你输入的成绩有误");

        }

    }

}

```

3 if语句的嵌套使用

  我们在遇到一些问题的时候 ,有时候一次比较并不能获取想得要的效果,这时候我们可以嵌套使用if来得到预期的效果,我们通过一个案例来演示一下

  获取三个数据中的最大值


```java

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner1 = new Scanner(System.in);

        System.out.println("请输入需要比较的数字1");

        double i= scanner1.nextDouble();

        Scanner scanner2 = new Scanner(System.in);

        System.out.println("请输入需要比较的数字2");

        double j =scanner2.nextDouble();

        Scanner scanner3 = new Scanner(System.in);

        System.out.println("请输入需要比较的数字3");

        double a = scanner3.nextDouble();

        double max;double max1;

        if(i>j){

            max=i;

        }else{

            max=j;

        }

        if(max>a){

            max1=max;

        }else{

            max1=a;

        }

        System.out.println("这三个数的最大值是"+max1);

    }

}

```

4 if语句使用时的注意事项

(1)比较表达式无论简单还是复杂,结果必须是boolean类型

(2)if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。

(3)一般来说:有左大括号就没有分号,有分号就没有左大括号


#### (2)switch结构语句

1 首先,我们了解一下switch语句的格式:

    switch(表达式){

case 值1:

语句体1;

break;

case 值2:

语句体2;

break;

case 值3:

语句体3;

break;

....

default:

语句体n+1;

break;

}

2 对switch语句的格式加以解释

    (1):switch表示这是switch语句

表达式的取值:byte,short,int,char

JDK5以后可以是枚举(什么是枚举,以后再讲)

JDK7以后可以是String

(2):case后面跟的是要和表达式进行比较的值

(3):语句体部分可以是一条或多条语句

(4):break表示中断,结束的意思,可以结束switch语句

(5):default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似

3  switch语句的执行流程:

  先计算表达式的值,然后和case后面的匹配,如果匹配成功就执行对应语句,遇到break就会结束,否则执行default控制的语句

  4 在面试的时候 也有一些关于switch表达式取值的问题

比如 byte,long,String 可以作为switch的表达式吗?

  switch的数据类型跟版本是有关系的:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int;从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型;从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

  5 switch语句的基本使用

  我们用一个案例来了解一下


```java

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入今天是这周的第几天");

        int i = scanner.nextInt();

        switch (i){

            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;

            default:

                System.out.println("你输入的值有误");break;

        }

    }

}

```

6 switch语句的注意事项

    (1):case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的值

(2):default可以省略吗?

可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。

(3):break可以省略吗?

可以省略,但是结果可能不是我们想要的。

会出现一个现象:case穿透。

最终我们建议不要省略

(4):default一定要在最后吗?

不是,可以在任意位置。但是建议在最后。

(5):switch语句的结束条件

a:遇到break就结束了

b:执行到末尾就结束了


#### (3)if语句和switch语句的区别

我们通过一个案列来演示一下

分别用switch语句和if语句来实验键盘录入月份然后输出对应的季节

switch语句的演示如下

```java

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入月份");

        int i = scanner.nextInt();

        switch (i){

            case 1:

                System.out.println("Winter");break;

            case 2:

                System.out.println("Winter");break;

            case 3:

                System.out.println("Spring");break;

            case 4:

                System.out.println("Spring");break;

            case 5:

                System.out.println("Spring");break;

            case 6:

                System.out.println("Summer");break;

            case 7:

                System.out.println("Summer");break;

            case 8:

                System.out.println("Summer");break;

            case 9:

                System.out.println("Fall");break;

            case 10:

                System.out.println("Fall");break;

            case 11:

                System.out.println("Fall");break;

            case 12:

                System.out.println("Winter");break;

            default:

                System.out.println("你输入的值有误");break;

        }

    }

}

```

if语句的演示如下

```java

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入月份,范围1-12");

        int i = scanner.nextInt();

        if(i==12||i==1||i==2){

            System.out.println("Winter");

        }

        else if(i==3||i==4||i==5){

            System.out.println("Spring");

        }

        else if(i==6||i==7||i==8){

            System.out.println("Summer");

        }

        else if(i==9||i==10||i==11){

            System.out.println("fall");

        }else {

            System.out.println("你输入的值不在范围内");

        }

        }

    }

```

什么时候我们需要用if语句,什么时候我们需要用switch语句呢?

if语句使用场景:

针对结果是boolean类型的判断

针对一个范围的判断

针对几个常量值的判断

switch语句使用场景:

针对几个常量值的判断

###  3 循环结构语句

在我们使用代码来达到预期效果的时候,有时候一些代码需要重复利用,如果我们使用顺序结构语句,也可以,但是会很繁琐,特别如果代码是上万行,特别麻烦,这时候我们可以考虑让这段代码反复执行,这段被重复执行的代码就叫做循环语句体,这个语句,就叫做循环结构语句。

循环结构语句主要分为 for循环和while循环两种

#### (1)for循环

1  for循环的格式

  for(初始化表达式语句;判断条件语句;控制条件语句) {

循环体语句;

}

2 for循环的执行流程

    (1):执行初始化表达式语句

(2):执行判断条件语句,看其返回值是true还是false

如果是true,就继续执行

如果是false,就结束循环

(3):执行循环体语句;

(4):执行控制条件语句

(5):回到B继续。

3  注意事项:

(1)初始化表达式语句只执行一次

(2)判断条件语句无论简单还是复杂结果是boolean类型。

(3)循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。

(4)一般来说:有左大括号就没有分号,有分号就没有左大括号

4 我们通过几个案例演示一下for循环语句的获取数据

  (1)控制台输出数据1-10


```java

public class Mydemo1 {

    public static void main(String[] args) {

        for (int i = 1; i <= 10; i++) {

            System.out.println(i);

        }

    }

}

```

  (2)控制台输出数据10-1


```java

public class Mydemo1 {

    public static void main(String[] args) {

        for (int i = 10; i >0; i--) {

            System.out.println(i);

        }

    }

}

```

5 我们通过几个案例来演示一下for语句的求和思想

(1)求出1-10之间数据的和

```java

public class Mydemo1 {

    public static void main(String[] args) {

        int sum=0;

        for (int i = 1; i <=10; i++) {

            sum+=i;


        }

        System.out.println(sum);

    }

}

```

(2)求出1-100的偶数和`

```java

public class Mydemo1 {

    public static void main(String[] args) {

        int sum=0;

        for (int i = 1; i <=100; i++) {

            if(i%2==0) {

                sum += i;

            }

        }

        System.out.println(sum);

    }

}

```

(3)求出1-100的奇数和

```java

public class Mydemo1 {

    public static void main(String[] args) {

        int sum=0;

        for (int i = 1; i <=100; i++) {

            if(i%2!=0) {

                sum += i;

            }

        }

        System.out.println(sum);

    }

}

```

6 如何用for循环来求水仙花数并且如何统计水仙花数出现的次数

```java

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        int j=0;

        for (int i = 100; i < 1000; i++) {

            int i1=(i/10/10%10);

            int i2=(i/10%10);

            int i3=(i%10);

            if(i1*i1*i1+i2*i2*i2+i3*i3*i3==i){

                j++;

                System.out.println("水仙花数有"+i);

            }

        } System.out.println("共有"+j+"个水仙花数");

    }

}

```

#### (2)while循环

1 while循环的格式

(1)基本格式:

                          while(判断条件语句) {

                  循环体语句;

                                      }

  (2)完整格式:

  初始化条件语句;

    while(判断条件语句) {

循环体语句;

控制条件语句;

  }

  2  执行流程

    (1)执行初始化条件语句;

(2)执行判断条件语句,看其返回值是true还是false

如果是true,就继续执行

如果是false,就结束循环

(3)执行循环体语句;

(4)执行控制条件语句

(5)回到b继续。

  3  我们通过两个案例演示一下while循环的统计思想和求和思想

  (1) 统计思想:统计水仙花数有多少个


```java

public class Mydemo1 {

    public static void main(String[] args) {

        int j = 0;int i=100;

        while(i<1000){

            int i1 = (i / 10 / 10 % 10);

            int i2 = (i / 10 % 10);

            int i3 = (i % 10);

            if(i1 * i1 * i1 + i2 * i2 * i2 + i3 * i3 * i3 == i) {

                j++;

                System.out.println("水仙花数有" + i);

            }

            i++;

        }

        System.out.println("共有" + j + "个水仙花数");

        }

    }

```

(2)求和思想:求1-100的和

```java

public class Mydemo1 {

    public static void main(String[] args) {

        int i=1;int sum=0;

        while(i<=100){

            sum+=i;i++;

        }

        System.out.println(sum);

    }

}

```

#### (3)do...whlie循环

1 do...while的格式:

    do {

循环体语句;

  }while(判断条件语句);

  完整格式;

初始化条件语句;

do {

循环体语句;

控制条件语句;

}while(判断条件语句);

2 执行流程

    (1)执行初始化条件语句;

(2)执行循环体语句;

(3)执行控制条件语句;

(4)执行判断条件语句,看其返回值是true还是false

如果是true,就继续执行

如果是false,就结束循环

(5)回到b继续。

3 我们通过一个案例来演示下do...while语句

再控制台输出1-10

```java

public class Mydemo1 {

    public static void main(String[] args) {

        int i=1;

        do{

            System.out.println(i);

            i++;

        }

        while(i<=10);

    }

}

```

#### (4)循环结构三种循环语句的区别及注意事项死循环

1 三种循环语句的区别

(1):do...while循环至少执行一次循环体。

而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。

(2):A: 如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用for循环。

因为变量及早的从内存中消失,可以提高内存的使用效率。

B:建议优先考虑for循环,然后是while循环 ,最后是do...while循环

2 死循环的注意事项

(1)一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。

(2)两种最简单的死循环格式

while(true){...}

for(;;){...}

#### (5)通过几个案例来熟悉循环结构的嵌套

1  请输出一个4行5列的星星(*)图案。

```java

public class Mydemo1 {

    public static void main(String[] args) {

        for (int j = 1; j < 5; j++) {

            for (int i = 1; i < 5; i++) {

            System.out.print("*");

        }

            System.out.println("*");

        }

    }

}

```

2 请输出下列的形状

*

**

***

****

*****

```java

public class Mydemo1 {

    public static void main(String[] args) {

        for (int j = 1; j < 6; j++) {

            for (int i = 1; i < 5; i++) {if(i<j){

            System.out.print("*");}

        }

            System.out.println("*");

        }

    }

}

```

3 在控制台输出九九乘法表

```java

package org.westos.zz;

import java.util.Scanner;

public class Mydemo1 {

    public static void main(String[] args) {

        for (int j = 1; j <= 9; j++) {

            for (int i = 1; i <= 9; i++) {if(i<=j){

            System.out.print(i+"*"+j+"="+i*j+"\t");}

        }

            System.out.println();

        }

    }

}

```

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,839评论 0 2
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,932评论 0 9
  • /*【程序21】 * 作者 南枫题目:求1+2!+3!+...+20!的和 1. 程序分析:此程序只是把累加变成了...
    HUC南枫阅读 430评论 0 0
  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 371评论 0 0
  • Day01 class 例子{ public static void main(String[] args){ ...
    周书达阅读 1,012评论 0 0