一、实验目的
- 掌握一维数组的声明、初始化、遍历及常见操作(如求平均值、最大值、最小值、排序、复制等)。
- 理解多维数组的使用,特别是二维数组的声明、初始化和遍历。
- 熟悉
String
类的常用操作,包括字符串的创建、修改、类型转换等。 - 掌握
StringBuffer
和StringBuilder
类的使用,理解它们的区别及适用场景。 - 综合运用数组和字符串的知识,解决实际问题。
二、实验学时
2学时
三、实验类型
验证性
四、实验需求
1、硬件
每人配备计算机1台,建议优先使用个人计算机开展实验。
2、软件
安装IntelliJ IDEA,以及Java运行所需要的相关基础环境。
3、网络
本地主机能够访问互联网和实验中心网络。
4、工具
无。
五、实验任务
- 一维数组操作:实现一维数组的常见操作,包括求平均值、最大值、最小值、排序和复制。
- 二维数组操作:实现二维数组的声明、初始化和遍历,并完成矩阵转置操作。
- 字符串操作:使用
String
类实现字符串的常见操作,包括字符串的拼接、查找、替换和类型转换。 - StringBuffer 和 StringBuilder 的使用:比较
StringBuffer
和StringBuilder
的性能差异,并实现字符串的动态修改。 - 综合任务:结合数组和字符串的知识,实现一个简单的学生成绩管理系统。
六、实验内容及步骤
任务 1:一维数组操作
步骤:
- 声明并初始化一个一维数组。
- 计算数组的平均值、最大值和最小值。
- 对数组进行排序。
- 复制数组到另一个数组。
示例代码:
import java.util.Arrays;
public class ArrayOperations {
public static void main(String[] args) {
int[] array = {5, 3, 9, 1, 7, 4};
// 计算平均值
int sum = 0;
for (int num : array) {
sum += num;
}
double average = (double) sum / array.length;
System.out.println("Average: " + average);
// 计算最大值和最小值
int max = array[0], min = array[0];
for (int num : array) {
if (num > max) max = num;
if (num < min) min = num;
}
System.out.println("Max: " + max);
System.out.println("Min: " + min);
// 数组排序
Arrays.sort(array);
System.out.println("Sorted Array: " + Arrays.toString(array));
// 数组复制
int[] copyArray = Arrays.copyOf(array, array.length);
System.out.println("Copied Array: " + Arrays.toString(copyArray));
}
}
运行结果如图3-1
图3-1
任务 2:二维数组操作
步骤:
- 声明并初始化一个二维数组(矩阵)。
- 遍历二维数组并打印矩阵。
- 实现矩阵的转置操作。
示例代码:
public class TwoDArray {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 打印原始矩阵
System.out.println("Original Matrix:");
printMatrix(matrix);
// 矩阵转置
int[][] transposedMatrix = new int[matrix[0].length][matrix.length];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
transposedMatrix[j][i] = matrix[i][j];
}
}
// 打印转置后的矩阵
System.out.println("Transposed Matrix:");
printMatrix(transposedMatrix);
}
// 打印二维数组
public static void printMatrix(int[][] matrix) {
for (int[] row : matrix) {
for (int num : row) {
System.out.print(num + " ");
}
System.out.println();
}
}
}
运行结果如图3-2
图3-2
任务 3:字符串操作
步骤:
- 使用
String
类创建字符串。 - 实现字符串的拼接、查找、替换操作。
- 实现字符串与基本数据类型的转换。
示例代码:
public class StringOperations {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "World";
// 字符串拼接
String result = str1 + " " + str2;
System.out.println("Concatenated String: " + result);
// 查找子字符串
int index = result.indexOf("World");
System.out.println("Index of 'World': " + index);
// 替换字符串
String replaced = result.replace("World", "Java");
System.out.println("Replaced String: " + replaced);
// 类型转换
int num = 123;
String numStr = Integer.toString(num); // int to String
int parsedNum = Integer.parseInt(numStr); // String to int
System.out.println("Parsed Number: " + parsedNum);
}
}
运行结果如图3-3
图3-3
任务 4:StringBuffer 和 StringBuilder 的使用
步骤:
- 使用
StringBuffer
和StringBuilder
分别实现字符串的动态修改。 - 比较两者的性能差异。
示例代码:
public class StringBufferBuilder {
public static void main(String[] args) {
// 使用StringBuffer
//System.currentTimeMillis();//毫秒
long startTime = System.nanoTime();//纳秒
StringBuffer buffer = new StringBuffer("Hello");
for (int i = 0; i < 10000; i++) {
buffer.append("Java");
}
//System.currentTimeMillis();//毫秒
long endTime = System.nanoTime();//纳秒
System.out.println("StringBuffer Time: " + (endTime - startTime) + "ns");
// 使用StringBuilder
//System.currentTimeMillis();//毫秒
startTime = System.nanoTime();//纳秒
StringBuilder builder = new StringBuilder("Hello");
for (int i = 0; i < 10000; i++) {
builder.append("Java");
}
//System.currentTimeMillis();//毫秒
endTime = System.nanoTime();//纳秒
System.out.println("StringBuilder Time: " + (endTime - startTime) + "ns");
}
}
运行结果如图3-4
图3-4
任务 5:综合任务 - 学生成绩管理程序
步骤:
- 使用数组存储学生姓名和成绩。
- 实现成绩的录入、查询、排序和输出功能。
代码:
import java.util.Arrays;
import java.util.Scanner;
public class StudentGradeSystem {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] names = new String[5];
int[] scores = new int[5];
// 录入学生姓名和成绩
for (int i = 0; i < names.length; i++) {
System.out.print("请输入学生姓名: ");
names[i] = scanner.next();
System.out.print("请输入学生成绩: ");
scores[i] = scanner.nextInt();
}
// 按成绩排序
for (int i = 0; i < scores.length - 1; i++) {
for (int j = i + 1; j < scores.length; j++) {
if (scores[i] < scores[j]) {
// 交换成绩
int tempScore = scores[i];
scores[i] = scores[j];
scores[j] = tempScore;
// 交换姓名
String tempName = names[i];
names[i] = names[j];
names[j] = tempName;
}
}
}
// 输出排序后的学生成绩
System.out.println("打印结果:");
for (int i = 0; i < names.length; i++) {
System.out.println(names[i] + ": " + scores[i]);
}
}
}
运行结果如图3-5
图3-5
七、实验考核
本实验考核采用【实验随堂查】方式开展。
每个实验完成后,在实验课上通过现场演示的方式向实验指导教师进行汇报,并完成现场问答交流。
每个实验考核满分100分,其中实验成果汇报60分,现场提问交流40分。
实验考核流程:
(1)学生演示汇报实验内容的完成情况,实验指导老师现场打分。
(2)指导老师结合实验内容进行提问,每位学生提问2-3个问题,根据回答的情况现场打分。
(3)实验考核结束后,进行公布成绩。