首页 > 技术文章 > 疯狂Java基础Day2

wangzheming35 2021-01-29 15:37 原文

巩固Java流程控制的学习。。。

一、用户交互Scanner

通过Scanner类获取用户的输入

import java.util.Scanner;

public class Demo1 {
    public static void main(String[] args) {
        //创建一个扫描对象,用于接收键盘数据
        Scanner sc = new Scanner(System.in); //hello world
        System.out.println("使用next方式接收:");
        //判断用户有没有字符串输入
        if (sc.hasNext()){
            //用next方式接收
            String s = sc.next(); //hello
            System.out.println("输出内容为:"+s);
        }
        sc.close(); //凡是属于IO流的类如果不关掉就一直会占用资源
    }
}
import java.util.Scanner;

public class Demo2 {
    public static void main(String[] args) {
        //创建一个扫描对象,用于接收键盘数据
        Scanner sc = new Scanner(System.in); //hello world
        System.out.println("使用nextLine方式接收:");
        //判断用户有没有字符串输入
        if (sc.hasNext()){
            //用next方式接收
            String s = sc.nextLine(); //hello world
            System.out.println("输出内容为:"+s);
        }
        sc.close(); //凡是属于IO流的类如果不关掉就一直会占用资源
    }
}

对于next()和nextLine():后者更常用

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

小案例:输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并执行结果。

import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner scanner =  new Scanner(System.in);
        //和
        double sum = 0.0;
        //计算输入了多少个数字
        int n = 0;
        //通过循环判断是否还有输入,并在里面对每一次进行求和统计
        while (scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            n++;
            sum = sum+x;
        }
        System.out.println(n+"个数的和为:"+sum);
        System.out.println(n+"个数的平均值为:"+(sum/n));

        scanner.close();
    }
}

二、顺序结构

按顺序一句一句执行,自上而下

三、选择结构

1、if单选择结构

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

2、if双选择结构

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

3、if多选择结构

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

4、if嵌套结构

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

5、switch选择结构

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

case具有穿透能力,switch的优势在于:可以匹配一个具体的值

//理解case的穿透力
public class Demo5 {
    public static void main(String[] args) {
        char grade = 'C';
        switch (grade) {
            case 'A':
                System.out.println("满分");
            case 'B':
                System.out.println("优秀");
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("不及格");
            default:
                System.out.println("未知");
        }
    }
}
//及格
//不及格
//未知

通过输出结果发现,case后的结果全部输出,为了避免该种现象,我们只需加上break

注意:jdk7后,switch支持字符串String类型

public class SwitchDemo {
    public static void main(String[] args) {
        //须知:字符的本质还是数字
        //反编译即可发现

        String fruit = "大西瓜";
        switch (fruit) {
            case "大西瓜":
                System.out.println("大西瓜");
                break;
            case "草莓":
                System.out.println("草莓");
                break;
            case "菠萝":
                System.out.println("菠萝");
                break;
            default:
                System.out.println("哈密瓜");
        }
    }
}

反编译一下:

image.png

四、循环结构

1、while循环

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

大多数情况下需要一个表达式失效的方式来结束循环

2、dowhile循环

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

while和do...while的区别

  • do...while循环至少会执行一次
  • while先判断后执行,do...while先执行后判断

3、for循环

for(初始化;布尔表达式;更新) {  
    //代码语句
}

最有效、最灵活的循环结构!

关于计算1+2+...+100=?的不同解法:

public class WhileDemo {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        while (i<=100) {
            sum = sum+i;
            i++;
        }
        System.out.println(sum);
    }
}
public class DoWhileDemo {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;
        do {
            sum = sum+i;
            i++;
        }while (i<=100);
        System.out.println(sum);
    }
}
public class ForDemo {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i <= 100; i++) {
            sum = sum+i;
        }
        System.out.println(sum);
    }
}

4、增强for循环

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

遍历用法:

public class EnhanceFor {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5};
        //普通for
        for (int i = 0; i < 5; i++) {
            System.out.println(arr[i]);
        }
        System.out.println("=====================");
        //增强for
        for (int x:arr
             ) {
            System.out.println(x);
        }
    }
}

5、break与continue

break用于强行退出循环

continue用于终止某次循环

推荐阅读