Java流程控制(Java process control)

Java流程控制

一、Scanner对象

我们可以通过Scanner类来获取用户的输入。

  • 基本语法:
Scanner s = new Scanner(System.in);
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

next()方法

public class Demo1 {
    public static void main(String[] args) {

        //创建扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收:");

        //判断用户有没有输入字符串
        if (scanner.hasNext()) {
            String s = scanner.next();
            System.out.println("输出的内容:" + s);
        }

        //关闭Scanner,凡是属于IO流的类如果不关闭会一直占用资源
        scanner.close();
    }
}

运行结果

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

nextLine()方法

public class Demo2 {
    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 czw
输出的内容:hello czw

next()与nextLine()的区别

  • **next(): **

输入有效字符后,后面输入的空格作为分隔符或者结束符。next() 不能得到带有空格的字符串

  • nextLine():

以回车(Enter)作为结束符,回车前的字符串都能输出,包括空格

二、Scanner进阶

public class Demo3 {
    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();
    }
}

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

public class Demo4 {
    public static void main(String[] args) {
        // 我们输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

        Scanner scanner = new Scanner(System.in);
        System.out.println("请用键盘输入数字:");

        //总和
        double sum = 0;
        // 计算输入了多少数字
        int count = 0;

        //通过循环判断是否还有输入,并在里面对每一次进行求和统计
        while (scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            count ++;
            sum = sum + x;
        }
        System.out.println("输入数字的个数:" + count);
        System.out.println("总和:" +sum);
        System.out.println("平均数:" + sum/count);
        scanner.close();
    }
}

运行结果

请用键盘输入数字:
1
2
3
4
5
6
7  
a
输入数字的个数:7
总和:28.0
平均数:4.0

三、顺序结构

最简单的算法结构

四、if选择结构 (重要)

五、循环结构

  • while循环

输出1-100的数字

public class Demo5 {
    // 输出1-100的数字
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
        }
    }
}

计算1+2+3+…+100

public class Demo6 {
    public static void main(String[] args) {
        // 计算 1 + 2 + 3 + ... + 99 + 100 = ?
        int i = 1;
        int sum = 0;
        while (i <= 100){
            sum = sum + i;
            i++;

        }
        System.out.println(sum);
    }
}
  • do while 循环 (循环至少会执行一次)
  • for循环

while 和 do while的区别

while先判断后执行。do while 先执行后判断。

for循环 (重要)

for 循环语句是支持迭代的一种通用结构,是最高效的。

练习1:计算0到100之间的奇数和偶数的和

public class ForDemo1 {
    public static void main(String[] args) {
       // 计算0到100之间的奇数和偶数的和
        int oddSum = 0;
        int evenSum = 0;

        for (int i = 0; i <= 100; i++) {
            if (i%2 != 0){
                //奇数
                oddSum += i;
            }else{
                evenSum += i;
            }
        }
        System.out.println("奇数的和:" + oddSum);
        System.out.println("偶数的和:" + evenSum);
    }
}

运行结果

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

练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个

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

            if (i%5 == 0){
                System.out.print(i+"\t");
            }
            if (i%15 == 0){
                System.out.println();
            }
        }
    }
}

练习3:打印九九乘法表

public class ForDemo3 {
    public static void main(String[] args) {

        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j + "*" + i + "=" + (j*i) +"\t");
            }
            System.out.println();
        }

    }
}

运行结果

1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

增强for循环

break和continue

break强制跳出循环,continue 用于终止某次循环过程。

练习

打印三角形

public class testDemo1 {
    public static void main(String[] args) {
        // 打印 5行 三角形
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            for (int j =1; j <= i; j++){
                System.out.print("*");
            }
            for (int j = 1; j < i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

运行结果

     *
    ***
   *****
  *******
 *********
————————

Java process control

一、Scanner对象

We can get the user’s input through the scanner class.

  • Basic syntax:
Scanner s = new Scanner(System.in);
  • Get the input string through the next() and nextline() methods of scanner class. Before reading, we generally need to use hasnext() and hasnextline() to judge whether there is still input data.

next()方法

public class Demo1 {
    public static void main(String[] args) {

        //创建扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收:");

        //判断用户有没有输入字符串
        if (scanner.hasNext()) {
            String s = scanner.next();
            System.out.println("输出的内容:" + s);
        }

        //关闭Scanner,凡是属于IO流的类如果不关闭会一直占用资源
        scanner.close();
    }
}

< strong > running results < / strong >

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

nextLine()方法

public class Demo2 {
    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();
    }
}

< strong > running results < / strong >

使用nextLine方式接收:
hello czw
输出的内容:hello czw

next()与nextLine()的区别

  • **next(): **

After entering a valid character, the space entered after it is used as a separator or terminator. Next() cannot get a string with spaces

  • nextLine():

The character string before entering can be used as the carriage return character

二、Scanner进阶

public class Demo3 {
    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();
    }
}

< strong > Title: enter multiple numbers to find the sum and average. Press enter to confirm each number. Enter a non number to end the input and output the execution result < / strong >

public class Demo4 {
    public static void main(String[] args) {
        // 我们输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

        Scanner scanner = new Scanner(System.in);
        System.out.println("请用键盘输入数字:");

        //总和
        double sum = 0;
        // 计算输入了多少数字
        int count = 0;

        //通过循环判断是否还有输入,并在里面对每一次进行求和统计
        while (scanner.hasNextDouble()) {
            double x = scanner.nextDouble();
            count ++;
            sum = sum + x;
        }
        System.out.println("输入数字的个数:" + count);
        System.out.println("总和:" +sum);
        System.out.println("平均数:" + sum/count);
        scanner.close();
    }
}

< strong > running results < / strong >

请用键盘输入数字:
1
2
3
4
5
6
7  
a
输入数字的个数:7
总和:28.0
平均数:4.0

3、 Sequential structure

The simplest algorithm structure

4、 If selection structure (important)

5、 Cyclic structure

  • while循环

< strong > output 1-100 numbers < / strong >

public class Demo5 {
    // 输出1-100的数字
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
        }
    }
}

< strong > calculate 1 + 2 + 3 ++ 100

public class Demo6 {
    public static void main(String[] args) {
        // 计算 1 + 2 + 3 + ... + 99 + 100 = ?
        int i = 1;
        int sum = 0;
        while (i <= 100){
            sum = sum + i;
            i++;

        }
        System.out.println(sum);
    }
}
  • Do while loop (the loop will execute at least once)
  • for循环

while 和 do while的区别

While is judged before execution. Do while executes first and then judges.

For loop (important)

For loop statement is a general structure that supports iteration and is the most efficient.

< strong > exercise 1: calculate the sum of odd and even numbers between 0 and 100 < / strong >

public class ForDemo1 {
    public static void main(String[] args) {
       // 计算0到100之间的奇数和偶数的和
        int oddSum = 0;
        int evenSum = 0;

        for (int i = 0; i <= 100; i++) {
            if (i%2 != 0){
                //奇数
                oddSum += i;
            }else{
                evenSum += i;
            }
        }
        System.out.println("奇数的和:" + oddSum);
        System.out.println("偶数的和:" + evenSum);
    }
}

< strong > running results < / strong >

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

< strong > exercise 2: use the while or for loop to output the number that can be divided by 5 between 1-1000, and output 3 < / strong >

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

            if (i%5 == 0){
                System.out.print(i+"\t");
            }
            if (i%15 == 0){
                System.out.println();
            }
        }
    }
}

< strong > exercise 3: print 99 multiplication table < / strong >

public class ForDemo3 {
    public static void main(String[] args) {

        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j + "*" + i + "=" + (j*i) +"\t");
            }
            System.out.println();
        }

    }
}

< strong > running results < / strong >

1*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	

Enhanced for loop

break和continue

Break forcibly jumps out of the loop, and continue is used to terminate a loop process.

practice

< strong > Print triangles < / strong >

public class testDemo1 {
    public static void main(String[] args) {
        // 打印 5行 三角形
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--) {
                System.out.print(" ");
            }
            for (int j =1; j <= i; j++){
                System.out.print("*");
            }
            for (int j = 1; j < i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

< strong > running results < / strong >

     *
    ***
   *****
  *******
 *********