Java学习day03

woefulmoon 发布于 2024-11-25 Java


引言

在Java学习的第三天,我们将深入探讨程序流程控制的基本概念和结构,包括分支结构和循环结构。这些是编程中不可或缺的部分,它们决定了程序的执行路径和重复执行的代码块。通过今天的学习,你将能够掌握如何使用这些控制结构来构建更复杂的程序,并解决实际问题。

程序流程控制概述

程序流程控制是指导程序执行顺序的机制。在Java中,我们主要通过分支结构和循环结构来实现流程控制。

分支结构

分支结构允许程序根据条件选择不同的执行路径。Java中最常见的分支结构是

1
if

语句和

1
switch

语句。

if分支结构

1
if

语句是最基本的分支结构,它根据条件的真假来决定是否执行特定的代码块。例如:

1
2
3
4
5
6
int age = 18;
if (age >= 18) {
    System.out.println("You are an adult.");
} else {
    System.out.println("You are not an adult.");
}

if分支结构的练习

我们可以通过一些练习来加深理解,比如根据用户输入的年龄判断是否成年。

1
2
3
4
5
6
7
8
9
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your age: ");
int age = scanner.nextInt();
if (age >= 18) {
    System.out.println("You are an adult.");
} else {
    System.out.println("You are not an adult.");
}
scanner.close();

switch分支结构

1
switch

语句是一种多分支选择结构,它允许程序根据变量的值选择多个执行路径中的一个。

1
switch

语句的穿透性是指一旦匹配到一个

1
case

,后续的

1
case

也会被执行,除非使用

1
break

关键字。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int month = 4;
String season;
switch (month) {
    case 12:
    case 1:
    case 2:
        season = "Winter";
        break;
    case 3:
    case 4:
    case 5:
        season = "Spring";
        break;
    // ... other cases ...
    default:
        season = "Unknown";
}
System.out.println("The season for month " + month + " is " + season);

循环结构

循环结构允许我们重复执行一段代码,直到满足某个条件。Java中主要的循环结构有

1
for

循环、

1
while

循环和

1
do-while

循环。

for循环

1
for

循环是一种预先确定循环次数的循环结构,其语法如下:

1
2
3
for (int i = 0; i < 5; i++) {
    System.out.println("循环次数: " + i);
}

for循环案例

我们可以通过一些案例来学习

1
for

循环,比如计算1到100的和,或者计算1到100中所有奇数的和。

1
2
3
4
5
int sum = 0;
for (int i = 1; i <= 100; i++) {
    sum += i;
}
System.out.println("1到100的和为: " + sum);

while循环

1
2
3
4
5
int j = 0;
while (j < 5) {
    System.out.println("循环次数: " + j);
    j++;
}

while循环案例

通过一些实际案例,比如计算用户输入的数字的累加和,我们可以更好地理解

1
while

循环。

1
2
3
4
5
6
7
8
9
10
11
12
13
Scanner scanner = new Scanner(System.in);
System.out.print("Enter numbers to sum (non-numeric to finish): ");
int sum = 0;
while (true) {
    String input = scanner.next();
    if (!input.matches("\\d+")) {
        break;
    }
    int number = Integer.parseInt(input);
    sum += number;
}
System.out.println("Sum is " + sum);
scanner.close();

do-while循环

1
2
3
4
5
int k = 0;
do {
    System.out.println("循环次数: " + k);
    k++;
} while (k < 5);

三种循环的区别

1
for

1
while

1
do-while

循环各有特点,适用于不同的场景。理解它们之间的区别对于选择合适的循环结构至关重要。

循环形式

死循环

死循环是一种无限循环,通常用于需要长时间运行的任务,或者在等待某个条件满足时使用。

1
2
3
while (true) {
    // 代码执行
}

循环嵌套

循环嵌套是指在一个循环内部再嵌套另一个循环,这在处理多维数组或复杂问题时非常有用。

1
2
3
4
5
6
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        System.out.print("i=" + i + ", j=" + j + " ");
    }
    System.out.println();
}

跳转关键字

break

1
break

关键字用于立即退出循环或

1
switch

语句。

1
2
3
4
5
6
for (int i = 0; i < 5; i++) {
    if (i == 3) {
        break; // 当i等于3时,退出循环
    }
    System.out.println("循环次数: " + i);
}

continue

1
continue

关键字用于跳过当前循环的剩余部分,直接开始下一次循环。

1
2
3
4
5
6
for (int i = 0; i < 5; i++) {
    if (i % 2 == 0) {
        continue; // 跳过偶数
    }
    System.out.println("奇数: " + i);
}

综合实战

通过综合实战案例,我们可以将学到的流程控制知识应用到实际问题中。

综合实战1:计算器

实现一个简单的计算器,可以进行基本的数学运算。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Scanner;

public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter first number: ");
        double num1 = scanner.nextDouble();
        System.out.print("Enter second number: ");
        double num2 = scanner.nextDouble();
        System.out.print("Enter operation (+, -, *, /): ");
        char operation = scanner.next().charAt(0);

        double result;
        switch (operation) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if (num2 != 0) {
                    result = num1 / num2;
                } else {
                    System.out.println("Cannot divide by zero.");
                    return;
                }
                break;
            default:
                System.out.println("Invalid operation.");
                return;
        }
        System.out.println("Result: " + result);
        scanner.close();
    }
}

综合实战2:猜数字

编写一个猜数字游戏,让用户猜测程序生成的随机数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Random;
import java.util.Scanner;

public class GuessNumber {
    public static void main(String[] args) {
        Random random = new Random();
        int numberToGuess = random.nextInt(100) + 1;
        Scanner scanner = new Scanner(System.in);

        System.out.print("Guess a number between 1 and 100: ");
        int userGuess = scanner.nextInt();

        while (userGuess != numberToGuess) {
            if (userGuess < numberToGuess) {
                System.out.println("Too low, try again.");
            } else {
                System.out.println("Too high, try again.");
            }
            System.out.print("Guess a number between 1 and 100: ");
            userGuess = scanner.nextInt();
        }

        System.out.println("Congratulations! You guessed the number.");
        scanner.close();
    }
}

综合实战3:验证码

创建一个简单的验证码生成器,用于用户输入验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Random;

public class Captcha {
    public static void main(String[] args) {
        Random random = new Random();
        StringBuilder captcha = new StringBuilder();
        for (int i = 0; i < 6; i++) {
            captcha.append(random.nextInt(10));
        }
        System.out.println("Captcha: " + captcha);
        // 这里可以添加更多的逻辑,比如将验证码与用户输入进行比较
    }
}

综合实战4:找素数

编写一个程序,找出一定范围内的所有素数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class PrimeNumbers {
    public static void main(String[] args) {
        int range = 100; // 定义查找素数的范围
        System.out.println("Prime numbers between 1 and " + range + ":");

        // 遍历从2到range的所有数字
        for (int i = 2; i <= range; i++) {
            boolean isPrime = true; // 假设当前数字是素数
            // 检查从2到i的平方根是否有因子
            for (int j = 2; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    isPrime = false; // 如果找到了因子,则不是素数
                    break; // 跳出内层循环
                }
            }
            // 如果isPrime仍然为true,说明i是素数
            if (isPrime) {
                System.out.println(i);
            }
        }
    }
}

这个程序首先定义了一个范围range,然后使用两层循环来检查每个数字是否为素数。外层循环遍历从2到range的所有数字,内层循环检查每个数字是否有除了1和它自身以外的因子。如果找到了因子,那么这个数字就不是素数,程序会打印出所有的素数。