练习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
类来接受用户的输入。