Java学习day03

Java

引言

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

程序流程控制概述

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

分支结构

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

if分支结构

if语句是最基本的分支结构,它根据条件的真假来决定是否执行特定的代码块。例如: int age = 18; if (age >= 18) { System.out.println("You are an adult."); } else { System.out.println("You are not an adult."); }

if分支结构的练习

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

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分支结构

switch语句是一种多分支选择结构,它允许程序根据变量的值选择多个执行路径中的一个。switch语句的穿透性是指一旦匹配到一个case,后续的case也会被执行,除非使用break关键字。

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中主要的循环结构有for循环、while循环和do-while循环。

for循环

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

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

for循环案例

我们可以通过一些案例来学习for循环,比如计算1到100的和,或者计算1到100中所有奇数的和。

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

while循环

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

while循环案例

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

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循环

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

三种循环的区别

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

循环形式

死循环

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

while (true) { // 代码执行 }

循环嵌套

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

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

break关键字用于立即退出循环或switch语句。

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

continue

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

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

综合实战

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

综合实战1:计算器

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

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:猜数字

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

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:验证码

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

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:找素数

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

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和它自身以外的因子。如果找到了因子,那么这个数字就不是素数,程序会打印出所有的素数。