
练习1: 创建一个整数数组,存储喜欢的5个数字,并编写代码打印出这些数字。
- public class Main {
- public static void main(String[] args) {
- // 创建一个整数数组,存储5个喜欢的数字
- int[] favoriteNumbers = {7, 22, 14, 42, 3};
-
- // 打印出这些数字
- System.out.println("我喜欢的数字:");
- for (int i = 0; i < favoriteNumbers.length; i++) {
- System.out.println(favoriteNumbers[i]);
- }
- }
- }
favoriteNumbers 的整数数组,其中包含了5个我们喜欢的数字。for 循环遍历数组,通过索引访问数组中的每个元素,并使用 System.out.println() 方法将它们打印出来。for 循环或增强型 for-each 循环来访问数组中的元素。练习2: 创建一个字符串数组,包含一些水果的名称,然后使用循环遍历并打印数组中的水果名称。
- public class Main {
- public static void main(String[] args) {
- // 创建一个字符串数组,包含一些水果的名称
- String[] fruits = {"苹果", "香蕉", "橙子", "葡萄", "樱桃"};
-
- // 使用循环遍历并打印数组中的水果名称
- System.out.println("水果列表:");
- for (int i = 0; i < fruits.length; i++) {
- System.out.println(fruits[i]);
- }
- }
- }
fruits 的字符串数组,其中包含了一些水果的名称。for 循环遍历数组,通过索引访问数组中的每个元素,并使用 System.out.println() 方法将它们打印出来。for 循环或增强型 for-each 循环来访问数组中的元素。练习3: 编写一个程序,接受用户输入的一组数字,然后计算它们的平均值。
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
-
- // 提示用户输入一组数字
- System.out.print("请输入一组数字,以空格分隔:");
- String input = scanner.nextLine();
-
- // 使用空格分割输入字符串,将数字存储到数组中
- String[] numbersAsString = input.split(" ");
- double[] numbers = new double[numbersAsString.length];
-
- for (int i = 0; i < numbersAsString.length; i++) {
- numbers[i] = Double.parseDouble(numbersAsString[i]);
- }
-
- // 计算数字的平均值
- double sum = 0;
- for (double number : numbers) {
- sum += number;
- }
-
- double average = sum / numbers.length;
-
- // 打印平均值
- System.out.println("这组数字的平均值是:" + average);
-
- // 关闭Scanner
- scanner.close();
- }
- }
Scanner 类接受用户的输入,要求用户输入一组数字,以空格分隔。double 类型的数组。Scanner 类用于接受用户输入,通过 split() 方法将输入字符串分割成数组,然后通过循环将字符串转换为数字。练习4: 创建一个二维整数数组来表示一个九宫格数独游戏的初始状态,并编写代码打印出数独的初始状态。
- public class Main {
- public static void main(String[] args) {
- // 创建一个二维整数数组来表示数独游戏的初始状态
- int[][] sudoku = {
- {5, 3, 0, 0, 7, 0, 0, 0, 0},
- {6, 0, 0, 1, 9, 5, 0, 0, 0},
- {0, 9, 8, 0, 0, 0, 0, 6, 0},
- {8, 0, 0, 0, 6, 0, 0, 0, 3},
- {4, 0, 0, 8, 0, 3, 0, 0, 1},
- {7, 0, 0, 0, 2, 0, 0, 0, 6},
- {0, 6, 0, 0, 0, 0, 2, 8, 0},
- {0, 0, 0, 4, 1, 9, 0, 0, 5},
- {0, 0, 0, 0, 8, 0, 0, 7, 9}
- };
-
- // 打印数独的初始状态
- System.out.println("数独的初始状态:");
- printSudoku(sudoku);
- }
-
- // 辅助方法:打印数独
- public static void printSudoku(int[][] sudoku) {
- for (int i = 0; i < sudoku.length; i++) {
- for (int j = 0; j < sudoku[i].length; j++) {
- System.out.print(sudoku[i][j] + " ");
- }
- System.out.println();
- }
- }
- }
sudoku 的二维整数数组,用于表示数独游戏的初始状态。数组中的0表示空格,其他数字表示已知的数。printSudoku 方法来打印数独的初始状态。该方法通过嵌套循环遍历二维数组,并逐行打印数独的格子。练习5: 编写一个程序,生成一个3x3的随机迷宫地图,其中包括起点、终点和墙壁。
- import java.util.Random;
-
- public class Main {
- public static void main(String[] args) {
- // 定义迷宫地图的大小
- int rows = 3;
- int cols = 3;
-
- // 创建一个二维字符数组来表示迷宫地图
- char[][] maze = generateMaze(rows, cols);
-
- // 打印迷宫地图
- System.out.println("随机生成的迷宫地图:");
- printMaze(maze);
- }
-
- // 辅助方法:生成随机迷宫地图
- public static char[][] generateMaze(int rows, int cols) {
- char[][] maze = new char[rows][cols];
- Random random = new Random();
-
- // 随机设置起点、终点和墙壁
- for (int i = 0; i < rows; i++) {
- for (int j = 0; j < cols; j++) {
- int randomNumber = random.nextInt(3); // 生成0到2之间的随机数
- if (randomNumber == 0) {
- maze[i][j] = 'S'; // 起点
- } else if (randomNumber == 1) {
- maze[i][j] = 'E'; // 终点
- } else {
- maze[i][j] = '#'; // 墙壁
- }
- }
- }
-
- return maze;
- }
-
- // 辅助方法:打印迷宫地图
- public static void printMaze(char[][] maze) {
- for (int i = 0; i < maze.length; i++) {
- for (int j = 0; j < maze[i].length; j++) {
- System.out.print(maze[i][j] + " ");
- }
- System.out.println();
- }
- }
- }
maze 用于表示迷宫地图。Random 类来生成随机的起点、终点和墙壁。我们通过生成0到2之间的随机数来确定地图上的元素,其中0表示起点,1表示终点,2表示墙壁。printMaze 方法打印生成的迷宫地图。Random 类用于生成随机数,帮助创建不同的迷宫地图。练习6: 编写一个程序,接受用户输入的一组数字,并查找其中的最大值和最小值。
- import java.util.Scanner;
-
- public class Main {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
-
- // 提示用户输入一组数字,以空格分隔
- System.out.print("请输入一组数字,以空格分隔:");
- String input = scanner.nextLine();
-
- // 使用空格分割输入字符串,将数字存储到数组中
- String[] numbersAsString = input.split(" ");
- double[] numbers = new double[numbersAsString.length];
-
- for (int i = 0; i < numbersAsString.length; i++) {
- numbers[i] = Double.parseDouble(numbersAsString[i]);
- }
-
- // 查找最大值和最小值
- double max = findMax(numbers);
- double min = findMin(numbers);
-
- // 打印最大值和最小值
- System.out.println("最大值是:" + max);
- System.out.println("最小值是:" + min);
-
- // 关闭Scanner
- scanner.close();
- }
-
- // 辅助方法:查找数组中的最大值
- public static double findMax(double[] numbers) {
- double max = numbers[0];
- for (double number : numbers) {
- if (number > max) {
- max = number;
- }
- }
- return max;
- }
-
- // 辅助方法:查找数组中的最小值
- public static double findMin(double[] numbers) {
- double min = numbers[0];
- for (double number : numbers) {
- if (number < min) {
- min = number;
- }
- }
- return min;
- }
- }
Scanner 类接受用户的输入,要求用户输入一组数字,以空格分隔。double 类型的数组。findMax 和 findMin 来分别查找数组中的最大值和最小值。Scanner 类用于接受用户输入,通过 split() 方法将输入字符串分割成数组,然后通过循环将字符串转换为数字。练习7: 创建两个整数数组,分别表示两个向量的坐标,然后编写代码计算这两个向量的点积(内积)。
- public class Main {
- public static void main(String[] args) {
- // 创建两个整数数组,分别表示两个向量的坐标
- int[] vector1 = {2, 3, -1};
- int[] vector2 = {1, -2, 2};
-
- // 计算两个向量的点积
- int dotProduct = calculateDotProduct(vector1, vector2);
-
- // 打印点积结果
- System.out.println("两个向量的点积是:" + dotProduct);
- }
-
- // 辅助方法:计算两个向量的点积
- public static int calculateDotProduct(int[] vector1, int[] vector2) {
- if (vector1.length != vector2.length) {
- throw new IllegalArgumentException("向量长度不一致");
- }
-
- int dotProduct = 0;
- for (int i = 0; i < vector1.length; i++) {
- dotProduct += vector1[i] * vector2[i];
- }
-
- return dotProduct;
- }
- }
vector1 和 vector2,它们分别表示两个向量的坐标。calculateDotProduct 来计算两个向量的点积。calculateDotProduct 接受两个整数数组,先检查它们的长度是否一致,然后计算点积。练习8: 使用冒泡排序或选择排序对一个整数数组进行升序排列,并打印排序后的数组。
以下是使用Java回答 “数组排列算法” 模块中的练习8的示例,采用冒泡排序算法,并包括解释和总结:
- public class Main {
- public static void main(String[] args) {
- int[] numbers = {5, 2, 9, 1, 5, 6};
-
- System.out.println("排序前的数组:");
- printArray(numbers);
-
- // 使用冒泡排序算法对数组进行升序排列
- bubbleSort(numbers);
-
- System.out.println("排序后的数组:");
- printArray(numbers);
- }
-
- // 冒泡排序算法
- public static void bubbleSort(int[] arr) {
- int n = arr.length;
- boolean swapped;
-
- for (int i = 0; i < n - 1; i++) {
- swapped = false;
-
- for (int j = 0; j < n - i - 1; j++) {
- if (arr[j] > arr[j + 1]) {
- // 交换arr[j]和arr[j+1]的位置
- int temp = arr[j];
- arr[j] = arr[j + 1];
- arr[j + 1] = temp;
- swapped = true;
- }
- }
-
- // 如果内循环没有发生交换,表示数组已排序完成,可以提前退出
- if (!swapped) {
- break;
- }
- }
- }
-
- // 打印数组
- public static void printArray(int[] arr) {
- for (int num : arr) {
- System.out.print(num + " ");
- }
- System.out.println();
- }
- }
numbers,包含一些未排序的整数。printArray 方法来打印排序前和排序后的数组。练习9: 编写一个程序,生成一个包含10个随机整数的数组,并使用快速排序算法对其进行排序。
以下是使用Java回答 “数组排列算法” 模块中的练习9的示例,采用快速排序算法,并包括解释和总结:
- import java.util.Random;
-
- public class Main {
- public static void main(String[] args) {
- int[] numbers = generateRandomArray(10);
-
- System.out.println("排序前的数组:");
- printArray(numbers);
-
- // 使用快速排序算法对数组进行升序排列
- quickSort(numbers, 0, numbers.length - 1);
-
- System.out.println("排序后的数组:");
- printArray(numbers);
- }
-
- // 快速排序算法
- public static void quickSort(int[] arr, int low, int high) {
- if (low < high) {
- int pivotIndex = partition(arr, low, high);
-
- // 递归排序左半部分和右半部分
- quickSort(arr, low, pivotIndex - 1);
- quickSort(arr, pivotIndex + 1, high);
- }
- }
-
- // 快速排序的分区函数
- public static int partition(int[] arr, int low, int high) {
- int pivot = arr[high];
- int i = low - 1;
-
- for (int j = low; j < high; j++) {
- if (arr[j] < pivot) {
- i++;
- // 交换arr[i]和arr[j]的位置
- int temp = arr[i];
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
-
- // 交换arr[i+1]和arr[high]的位置,将pivot放到正确的位置
- int temp = arr[i + 1];
- arr[i + 1] = arr[high];
- arr[high] = temp;
-
- return i + 1;
- }
-
- // 生成包含n个随机整数的数组
- public static int[] generateRandomArray(int n) {
- int[] arr = new int[n];
- Random random = new Random();
-
- for (int i = 0; i < n; i++) {
- arr[i] = random.nextInt(100); // 生成0到99之间的随机整数
- }
-
- return arr;
- }
-
- // 打印数组
- public static void printArray(int[] arr) {
- for (int num : arr) {
- System.out.print(num + " ");
- }
- System.out.println();
- }
- }
numbers。quickSort 对数组进行升序排列。generateRandomArray 方法来生成随机数组,并使用 printArray 方法来打印排序前和排序后的数组。练习10: 创建一个简单的任务管理程序,使用数组来存储任务的描述和状态(未完成/已完成),并提供选项来添加、查看和标记任务的状态。
- import java.util.Scanner;
-
- public class TaskManager {
- private static final int MAX_TASKS = 100; // 最大任务数量
- private String[] tasks; // 存储任务的描述
- private boolean[] taskStatus; // 存储任务的状态,true表示已完成,false表示未完成
- private int taskCount; // 任务数量
-
- public TaskManager() {
- tasks = new String[MAX_TASKS];
- taskStatus = new boolean[MAX_TASKS];
- taskCount = 0;
- }
-
- // 添加新任务
- public void addTask(String description) {
- if (taskCount < MAX_TASKS) {
- tasks[taskCount] = description;
- taskStatus[taskCount] = false; // 默认设置为未完成
- taskCount++;
- System.out.println("任务已添加!");
- } else {
- System.out.println("任务列表已满,无法添加新任务。");
- }
- }
-
- // 查看任务列表
- public void viewTasks() {
- if (taskCount == 0) {
- System.out.println("任务列表为空。");
- } else {
- System.out.println("任务列表:");
- for (int i = 0; i < taskCount; i++) {
- String status = taskStatus[i] ? "[已完成]" : "[未完成]";
- System.out.println(status + " " + (i + 1) + ". " + tasks[i]);
- }
- }
- }
-
- // 标记任务状态
- public void markTaskCompleted(int index) {
- if (index >= 1 && index <= taskCount) {
- taskStatus[index - 1] = true;
- System.out.println("任务已标记为已完成。");
- } else {
- System.out.println("无效的任务索引。");
- }
- }
-
- public static void main(String[] args) {
- TaskManager taskManager = new TaskManager();
- Scanner scanner = new Scanner(System.in);
-
- while (true) {
- System.out.println("任务管理程序选项:");
- System.out.println("1. 添加新任务");
- System.out.println("2. 查看任务列表");
- System.out.println("3. 标记任务为已完成");
- System.out.println("4. 退出程序");
- System.out.print("请选择操作(1/2/3/4):");
-
- int choice = scanner.nextInt();
- scanner.nextLine(); // 消耗换行符
-
- switch (choice) {
- case 1:
- System.out.print("请输入任务描述:");
- String description = scanner.nextLine();
- taskManager.addTask(description);
- break;
- case 2:
- taskManager.viewTasks();
- break;
- case 3:
- System.out.print("请输入要标记为已完成的任务索引:");
- int index = scanner.nextInt();
- taskManager.markTaskCompleted(index);
- break;
- case 4:
- System.out.println("程序已退出。");
- scanner.close();
- System.exit(0);
- default:
- System.out.println("无效的选项,请重新选择。");
- break;
- }
- }
- }
- }
TaskManager 的任务管理程序类,使用数组来存储任务的描述和状态(未完成/已完成)。Scanner 类来接受用户的输入。