引言
在Java学习的第三天,我们将深入探讨程序流程控制的基本概念和结构,包括分支结构和循环结构。这些是编程中不可或缺的部分,它们决定了程序的执行路径和重复执行的代码块。通过今天的学习,你将能够掌握如何使用这些控制结构来构建更复杂的程序,并解决实际问题。
程序流程控制概述
程序流程控制是指导程序执行顺序的机制。在Java中,我们主要通过分支结构和循环结构来实现流程控制。
分支结构
分支结构允许程序根据条件选择不同的执行路径。Java中最常见的分支结构是
1 | if |
语句和
1 | switch |
语句。
if分支结构
1 | if |
语句是最基本的分支结构,它根据条件的真假来决定是否执行特定的代码块。例如:
1 2 3 4 5 6 |
if分支结构的练习
我们可以通过一些练习来加深理解,比如根据用户输入的年龄判断是否成年。
1 2 3 4 5 6 7 8 9 |
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 |
循环结构
循环结构允许我们重复执行一段代码,直到满足某个条件。Java中主要的循环结构有
1 | for |
循环、
1 | while |
循环和
1 | do-while |
循环。
for循环
1 | for |
循环是一种预先确定循环次数的循环结构,其语法如下:
1 2 3 |
for循环案例
我们可以通过一些案例来学习
1 | for |
循环,比如计算1到100的和,或者计算1到100中所有奇数的和。
1 2 3 4 5 |
while循环
1 2 3 4 5 |
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 |
三种循环的区别
1 | for |
、
1 | while |
和
1 | do-while |
循环各有特点,适用于不同的场景。理解它们之间的区别对于选择合适的循环结构至关重要。
循环形式
死循环
死循环是一种无限循环,通常用于需要长时间运行的任务,或者在等待某个条件满足时使用。
1 2 3 | while (true) { // 代码执行 } |
循环嵌套
循环嵌套是指在一个循环内部再嵌套另一个循环,这在处理多维数组或复杂问题时非常有用。
1 2 3 4 5 6 |
跳转关键字
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和它自身以外的因子。如果找到了因子,那么这个数字就不是素数,程序会打印出所有的素数。