Java学习之路:流程控制

乎语百科 284 0

2022-10-11 10:58:41

前言

本文开始流程控制方面的学习,主要包括用户交互和流程控制语句,适合新手学习。


1 用户交互Scanner

1.1 Scanner对象

Java提供了一个可以获取用户输入的Scanner工具类

基本语法:

Scanner s = new Scanner(System.in);

通过Scanner类的next()nextLine()方法获取输入的字符串,读取之前使用hasNext()hasNextLine()判断是否还有输入的数据。

next()nextLine()方法代码示例:

public class Demo01 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");

        //判断用户有没有输入字符串
        if (scanner.hasNext()==true){
            //使用next方式接收
            String str = scanner.next();
            System.out.println("输出的内容为:"+str);
        }
        //凡是属于IO流的类,如果不关闭会一直占用资源,要养成良好习惯,用完就关
        scanner.close();

    }
}

结果:

使用next方式接收:
hello world
输出的内容为:hello

【注意】:无法输出空格之后的数据

  • 一定要读取到有效字符后才可以结束输入
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  • 只有输入有效字符才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

hasNext()hasNextLine()方法代码示例:

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");

        //判断是否还有输入
        if (scanner.hasNextLine()){
            String str = scanner.nextLine();
            System.out.println("输出的内容为"+str);
        }

        scanner.close();
    }
}

结果:

使用nextLine方式接收:
hello world
输出的内容为hello world
  • 以enter为结束符
  • 可以获取空格

hasNextInt()hasNextFloat() 方法示例:

import java.util.Scanner;

public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        //从键盘接收数据
        int i = 0;
        float f = 0.0f;
        System.out.println("请输入整数:");

        if (scanner.hasNextInt()){
            i = scanner.nextInt();
            System.out.println("整数数据:"+i);
        }else{
            System.out.println("输入的不是整数数据!");
        }

        System.out.println("请输入小数:");

        if (scanner.hasNextFloat()){
            f = scanner.nextFloat();
            System.out.println("小数数据:"+f);
        }else{
            System.out.println("输入的不是小数数据!");
        }

        scanner.close();
    }
}

结果:

请输入整数:
10
整数数据:10
请输入小数:
0.6
小数数据:0.6

1.2 Scanner进阶

【练习题】:输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
        Scanner scanner = new Scanner((System.in));

        //从键盘接收数据
        double sum = 0;
        //计算输入了多少个数字
        int m = 0;

        System.out.println("请输入数据:");

        //通过循环判断是否还有输入,并在里面对每一次进行求和和统计
        while (scanner.hasNextDouble()){
            double x = scanner.nextDouble();
            m = m + 1; //m++
            sum = sum + x;
            System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
        }

        System.out.println(m + "个数的和为" + sum);
        System.out.println(m + "个数的平均数为" + (sum / m));

        scanner.close();
    }
}

结果:

请输入数据:
10
你输入了第1个数据,当前结果sum=10.0
22
你输入了第2个数据,当前结果sum=32.0

222
你输入了第3个数据,当前结果sum=254.0
X
3个数的和为254.0
3个数的平均数为84.66666666666667

【注意】对msum需要在全局上指定数据类型和初值,不能只在while局部里面赋初值,否则程序在输出时候会报错。


2 顺序结构

语句与语句之间,框与框之间是按从上到下的顺序进行的,由若干个依次执行的处理步骤组成的,是任何一个算法都离不开的一种基本算法结构。


3 选择结构

3.1 if但选择结构

判断一个事情是否可行,然后才去执行,这样一个过程在程序中用if语句来表示。

语法:

if (布尔表达式){
    //如果布尔表达式为true将执行的语句
}

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容:");
        String s = scanner.nextLine();

        //equals:判断字符串是否相等
        if (s.equals("Hello")){
            System.out.println(s);
        }
        System.out.println("END");

        scanner.close();
    }
}

结果:

请输入内容:
Hello
Hello
END

3.2 if双选择结构

当单if结构无法满足需求的时候,就行需要双选择if-else结构。

语法:

if(布尔表达式){
    //如果布尔表达式的值为true
}else{
    //如果布尔表达式的值为false
}

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        //考试分数大于60及格,小于60不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score>=60){
            System.out.println("及格");
        }else{
            System.out.println("不及格");
        }

        scanner.close();
    }
}

结果:

请输入成绩:
60
及格

3.3 if多选择结构

当出现的选项不止两个时,需要一个多选择结构来处理这类问题。

语法:

if(布尔表达式1){
    //如果布尔表达式1的值为true执行代码
}else if(布尔表达式2){
    //如果布尔表达式2的值为true执行代码
}else if(布尔表达式3){
    //如果布尔表达式3的值为true执行代码
}else{
    //如果以上布尔表达式都不为true执行代码
}

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score==100){
            System.out.println("恭喜满分");
        }else if (score<100 && score>=90){
            System.out.println("A");
        }else if (score<90 && score>=80){
            System.out.println("B");
        }else if (score<80 && score>=70){
            System.out.println("C");
        }else if (score<70 && score>=60){
            System.out.println("D");
        }else if (score<60 && score>=0){
            System.out.println("不及格");
        }else {
            System.out.println("成绩错误");
        }

        scanner.close();
    }
}

结果:

请输入成绩:
100
恭喜满分

3.4 嵌套的if结构

可以在if或者else if语句中嵌套使用if或者else if语句。

语法:

if(布尔表达式1){
    //如果布尔表达式1的值为true执行代码
    if(布尔表达式2){
        //如果布尔表达式2的值为true执行代码
    }
}

3.5 switch多选择结构

多选择结构也可以用switch case语句实现。switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

switch语句的变量类型】

  • byte、short、int、char
  • 从Java SE 7开始
  • switch支持字符串String类型
  • case标签必须为字符串常量或者字面量

语法:

switch(expression){
    case value :
        //语句
        break; //可选
    case value :
        //语句
        break; //可选
    //可以有任意数量的case语句
    default : //可选
        //语句
}

示例代码:

public class SwitchDemo01 {
    public static void main(String[] args) {
        char grade = 'C';

        switch (grade){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("不及格");
                break;
        }
    }
}

结果:

及格

【注意】

  • 存在case穿透
  • 不加break就会输出全部结果

4 循环结构

4.1 while循环

语法:

while(布尔表达式){
    //循环内容
}

【注意】

  • 只要布尔表达式为true,循环就回一直执行下去
  • 需要一个表达式失效的方式结束循环
  • 少部分情况需要循环一直执行
  • 循环条件一直为true会造成无限循环,应该避免这种情况,容易造成程序崩溃

【练习】计算1+2+3+...+100=?

public class WhileDemo01 {
    public static void main(String[] args) {
        int i = 1;
        int sum = 0;
        while (i<=100){
            sum = sum + i;
            i++;
        }
        System.out.println(sum);
    }
}

结果:

5050

4.2 do while循环

对于while语句而言,如果不满足条件,则不能进入循环。当需要即使不满足条件,也至少执行一次。do while循环会至少执行一次。

语法:

do {
    //代码语句
}while(布尔表达式);

【while和do while的区别】

  • while先判断后执行,do while是先执行后判断
  • do while总是保证循环至少被执行一次
public class DoWhileDemo01 {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;

        do {
            sum = sum + i;
            i++;
        }while (i<=100);

        System.out.println(sum);
    }
}

结果:

5050

4.3 for循环

for循环可以让程序变得更简单。

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 0; //初始化条件
        while (a<=100){ //条件判断
            System.out.println(a); //循环体
            a+=10; //迭代条件
        }
        System.out.println("while循环结束");

        for (int i=0;i<=100;i+=10){
            System.out.println(i);
        }

        System.out.println("for循环结束");
    }
}

结果:

0
10
20
30
40
50
60
70
80
90
100
while循环结束
0
10
20
30
40
50
60
70
80
90
100
for循环结束

【练习】

① 计算0到100之间的奇数和偶数的和。

public class ForDemo02 {
    public static void main(String[] args) {
        //计算0到100之间的奇数和偶数的和
        int oddsum = 0;
        int evensum = 0;
        for(int i = 0;i <= 100;i+=1){
            if (i%2!=0){
                oddsum += i;
            }else{
                evensum += i;
            }
        }
        System.out.println("奇数的和:"+oddsum);
        System.out.println("偶数的和:"+evensum);
    }
}

结果:

奇数的和:2500
偶数的和:2550

② 用while或for循环输出1-1000之间能被5整除的数,并且每行输出8个。

public class Test01 {
    public static void main(String[] args) {
        //用while或for循环输出1-1000之间能被5整除的数,并且每行输出8个。
        int i = 1;
        while (i <= 1000){

           double a = i % 5;
            if (a == 0){
                if (i % 8 == 0){
                    System.out.println(i+" ");
                }else{
                    System.out.print(i+" ");
                }
            }
        i++;
        }
    }
}

结果:

5 10 15 20 25 30 35 40
45 50 55 60 65 70 75 80
85 90 95 100 105 110 115 120
125 130 135 140 145 150 155 160
165 170 175 180 185 190 195 200
205 210 215 220 225 230 235 240
245 250 255 260 265 270 275 280
285 290 295 300 305 310 315 320
325 330 335 340 345 350 355 360
365 370 375 380 385 390 395 400
405 410 415 420 425 430 435 440
445 450 455 460 465 470 475 480
485 490 495 500 505 510 515 520
525 530 535 540 545 550 555 560
565 570 575 580 585 590 595 600
605 610 615 620 625 630 635 640
645 650 655 660 665 670 675 680
685 690 695 700 705 710 715 720
725 730 735 740 745 750 755 760
765 770 775 780 785 790 795 800
805 810 815 820 825 830 835 840
845 850 855 860 865 870 875 880
885 890 895 900 905 910 915 920
925 930 935 940 945 950 955 960
965 970 975 980 985 990 995 1000 

③ 打印九九乘法表

public class Test02 {
    public static void main(String[] args) {
        //打印九九乘法表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                if (i==j){
                    System.out.println(" "+i+"x"+j+"="+i*j);
                }else{
                    System.out.print(" "+i+"x"+j+"="+i*j);
                }
            }
        }
    }
}

结果:

 1x1=1
 2x1=2 2x2=4
 3x1=3 3x2=6 3x3=9
 4x1=4 4x2=8 4x3=12 4x4=16
 5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
 6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
 7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
 8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

4.4 增强for循环

主要用于数组或集合。

语法:

for(声明语句 : 表达式)
{
     //代码语句
}

【注意】

  • 声明新的局部变量,该变量的类型必须和数组元素的类型匹配;
  • 表达式是要访问的数组名,或者是返回值为数组的方法。
public class ForDemo03 {
    public static void main(String[] args) {
        int[] num = {10,20,30,40,50}; //定义一个数组

        for (int i = 0;i<5;i++){
            System.out.println(num[i]);
        }
        System.out.println("==================");

        //遍历数组的元素
        for (int x:num){
            System.out.println(x);
        }
    }
}

结果:

10
20
30
40
50
==================
10
20
30
40
50

5 break和continue语句

【break】

在任何循环语句的主体部分,均可用break控制循环的流程,可以强行退出循环。

【continue】

用在循环语句体中,用于终止某次循环过程,即跳过循环体中未执行的语句,接着进行下一次是否执行循环的判定。

【goto】

带标签的breakcontinue


本章节学习结束,接下来再接再厉,加油!!!

标签:

留言评论

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~