杰瑞科技汇

Java实验指导答案如何正确使用?

这份资料不是简单地粘贴代码,而是以“实验指导”的形式,为您详细讲解每个实验的目标、知识点、实现思路、核心代码和常见问题,这样不仅能完成实验,更能真正理解Java编程的核心思想。

Java实验指导答案如何正确使用?-图1
(图片来源网络,侵删)

Java程序设计 实验指导与答案解析

Java基础语法与流程控制

实验目标:

  1. 掌握Java程序的基本结构(public class, main方法)。
  2. 熟练使用基本数据类型、变量、常量和运算符。
  3. 掌握if-elseswitchforwhiledo-while等流程控制语句。
  4. 理解并使用Scanner类进行控制台输入。

1:简单计算器**

任务描述: 编写一个程序,实现一个简单的控制台计算器,用户输入两个数字和一个运算符(, , , ),程序输出计算结果,如果运算符非法或除数为0,则给出错误提示。

核心知识点:

Java实验指导答案如何正确使用?-图2
(图片来源网络,侵删)
  • Scanner 类获取用户输入
  • switch 语句处理多分支
  • if-else 语句进行条件判断(如除数为0)
  • 基本的算术运算

实现思路:

  1. 创建Scanner对象来读取用户输入。
  2. 提示用户并分别读取第一个数字、运算符和第二个数字。
  3. 使用switch语句根据运算符进行不同的计算。
  4. case '/'中,需要先用if判断第二个数字是否为0,如果为0则输出错误信息并break,否则才进行除法运算。
  5. 使用default处理非法运算符的情况。

参考代码:

import java.util.Scanner;
public class SimpleCalculator {
    public static void main(String[] args) {
        // 1. 创建Scanner对象
        Scanner scanner = new Scanner(System.in);
        // 2. 获取用户输入
        System.out.print("请输入第一个数字: ");
        double num1 = scanner.nextDouble();
        System.out.print("请输入运算符 (+, -, *, /): ");
        char operator = scanner.next().charAt(0); // 读取字符串的第一个字符
        System.out.print("请输入第二个数字: ");
        double num2 = scanner.nextDouble();
        double result = 0;
        // 3. 使用switch进行计算
        switch (operator) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                // 4. 处理除数为0的情况
                if (num2 != 0) {
                    result = num1 / num2;
                } else {
                    System.out.println("错误:除数不能为0!");
                    return; // 结束程序
                }
                break;
            default:
                System.out.println("错误:无效的运算符!");
                return; // 结束程序
        }
        // 5. 输出结果
        System.out.println("计算结果是: " + result);
        // 关闭Scanner,防止资源泄露 (Java 7+ 的try-with-resources更好,但这里用基础方式)
        scanner.close();
    }
}

2:判断素数**

任务描述: 编写一个程序,从控制台接收一个正整数,判断该数是否为素数(质数),素数是指只能被1和它本身整除的大于1的自然数。

核心知识点:

  • for 循环
  • if 条件判断
  • 取模运算符
  • 逻辑运算符 &&

实现思路:

  1. 获取用户输入的整数 n
  2. n <= 1,则直接不是素数。
  3. n == 2,则是素数。
  4. 对于 n > 2 的情况,使用一个for循环,从 i = 2 遍历到 Math.sqrt(n)(优化点:只需判断到其平方根即可)。
  5. 在循环中,n 能被 i 整除(n % i == 0),则 n 不是素数,可以提前结束循环。
  6. 循环结束后,如果n没有被任何数整除,则是素数。

参考代码:

import java.util.Scanner;
public class PrimeNumberChecker {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个正整数: ");
        int number = scanner.nextInt();
        boolean isPrime = true; // 假设是素数
        // 处理小于等于1的数
        if (number <= 1) {
            isPrime = false;
        } else {
            // 从2遍历到number的平方根
            for (int i = 2; i <= Math.sqrt(number); i++) {
                if (number % i == 0) {
                    isPrime = false; // 发现一个能整除的因子,就不是素数
                    break; // 提前退出循环
                }
            }
        }
        // 输出结果
        if (isPrime) {
            System.out.println(number + " 是一个素数。");
        } else {
            System.out.println(number + " 不是一个素数。");
        }
        scanner.close();
    }
}

面向对象编程基础

实验目标:

  1. 掌握类的定义和对象的创建。
  2. 理解并使用成员变量(属性)和成员方法。
  3. 掌握构造方法的定义和使用。
  4. 理解privatepublic等访问修饰符的作用。
  5. 掌握this关键字的使用。

1:学生信息管理**

任务描述: 创建一个Student类,用于表示学生信息,该类应包含属性:id(学号)、name(姓名)、age(年龄),要求:

  1. 属性为private
  2. 提供一个无参构造方法和一个全参构造方法。
  3. 为每个属性提供gettersetter方法。
  4. 重写toString()方法,用于方便打印学生信息。
  5. main方法中创建Student对象,并测试其方法。

核心知识点:

  • 类与对象
  • 封装(private属性,public方法)
  • 构造方法
  • getter/setter方法
  • toString()方法重写

参考代码:

Student.java (类文件)

public class Student {
    // 1. 私有属性
    private String id;
    private String name;
    private int age;
    // 2. 无参构造方法
    public Student() {
    }
    // 3. 全参构造方法
    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    // 4. getter 和 setter 方法
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    // 5. 重写 toString() 方法
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

StudentTest.java (测试类)

public class StudentTest {
    public static void main(String[] args) {
        // 使用全参构造方法创建对象
        Student student1 = new Student("1001", "张三", 20);
        // 使用getter方法获取属性
        System.out.println("学号: " + student1.getId());
        System.out.println("姓名: " + student1.getName());
        System.out.println("年龄: " + student1.getAge());
        System.out.println("--------------------");
        // 使用setter方法修改属性
        student1.setAge(21);
        System.out.println("修改后的年龄: " + student1.getAge());
        System.out.println("--------------------");
        // 直接调用对象,会自动调用toString()方法
        System.out.println("学生信息: " + student1);
    }
}

数组与常用类

实验目标:

  1. 掌握一维数组和二维数组的声明、初始化和使用。
  2. 掌握String类的常用方法(length(), substring(), indexOf()等)。
  3. 掌握Arrays类的常用方法(sort(), toString()等)。

1:数组排序与查找**

任务描述:

  1. 创建一个包含10个随机整数的数组。
  2. 使用Arrays.sort()方法对数组进行升序排序。
  3. 打印排序前后的数组内容。
  4. 实现一个简单的线性查找或二分查找(前提是数组已排序),查找用户输入的数字是否在数组中。

核心知识点:

  • 数组的创建和遍历
  • Arrays工具类
  • for-each循环
  • 查找算法

实现思路:

  1. 创建一个int数组并初始化。
  2. 打印排序前的数组(使用Arrays.toString())。
  3. 调用Arrays.sort()进行排序。
  4. 打印排序后的数组。
  5. 获取用户要查找的数字。
  6. 使用Arrays.binarySearch()进行二分查找(效率更高,但前提是数组必须有序)。
  7. 根据返回值判断查找结果(返回值为索引,-1或负数表示未找到)。

参考代码:

import java.util.Arrays;
import java.util.Scanner;
public class ArraySortAndSearch {
    public static void main(String[] args) {
        int[] numbers = {34, 12, 89, 5, 67, 42, 29, 58, 99, 41};
        System.out.println("排序前的数组: " + Arrays.toString(numbers));
        // 对数组进行排序
        Arrays.sort(numbers);
        System.out.println("排序后的数组: " + Arrays.toString(numbers));
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个要查找的数字: ");
        int target = scanner.nextInt();
        // 使用二分查找
        int index = Arrays.binarySearch(numbers, target);
        if (index >= 0) {
            System.out.println("数字 " + target + " 在数组中,索引位置是: " + index);
        } else {
            System.out.println("数字 " + target + " 不在数组中。");
        }
        scanner.close();
    }
}

异常处理

实验目标:

  1. 理解异常的概念和分类。
  2. 掌握try-catch-finally语句块的使用。
  3. 能够自定义异常。

1:文件读取异常处理**

任务描述: 编写一个程序,尝试读取一个不存在的文件test.txt,使用try-catch块来捕获并处理可能发生的FileNotFoundException异常,并给出友好的提示信息。

核心知识点:

  • try-catch-finally 结构
  • 常见异常类型(FileNotFoundException, IOException等)
  • FileReader

实现思路:

  1. try代码块中,创建FileReader对象来读取文件。
  2. 将可能抛出异常的代码(如new FileReader("test.txt"))放在try块中。
  3. 使用catch (FileNotFoundException e)来捕获特定的文件未找到异常。
  4. catch块中,打印异常信息或自定义友好提示。
  5. (可选)finally块中可以放置关闭资源的代码,确保资源被释放。

参考代码:

import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class ExceptionHandlingDemo {
    public static void main(String[] args) {
        FileReader reader = null; // 在try块外声明,以便在finally块中使用
        try {
            // 尝试读取一个不存在的文件
            reader = new FileReader("test.txt");
            System.out.println("文件打开成功!");
            // ... 其他文件操作 ...
        } catch (FileNotFoundException e) {
            // 捕获文件未找到异常
            System.out.println("错误:文件未找到!请检查文件名和路径是否正确。");
            // e.printStackTrace(); // 可以打印完整的堆栈信息,用于调试
        } finally {
            // 无论是否发生异常,finally块中的代码都会执行
            // 通常用于释放资源
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    System.out.println("关闭文件时发生错误。");
                }
            }
            System.out.println("文件读取操作结束。");
        }
    }
}

集合框架

实验目标:

  1. 掌握ArrayListHashSetHashMap等常用集合类的使用。
  2. 理解集合的泛型。
  3. 掌握集合的常用方法(add, remove, get, put, contains等)。
  4. 能够遍历集合(迭代器、增强for循环)。

1:学生名单管理**

任务描述:

  1. 使用ArrayList<Student>(使用实验二的Student类)来存储多个学生对象。
  2. 实现添加学生、删除学生(按学号)、查找学生(按学号)、打印所有学生信息的功能。
  3. 注意学号的唯一性。

核心知识点:

  • ArrayList 集合
  • 泛型 <Student>
  • 迭代器 Iterator 用于安全删除
  • 增强for循环用于遍历

参考代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class StudentManager {
    public static void main(String[] args) {
        // 创建一个Student类型的ArrayList
        ArrayList<Student> studentList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("\n--- 学生管理系统 ---");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 查找学生");
            System.out.println("4. 打印所有学生");
            System.out.println("5. 退出");
            System.out.print("请选择操作: ");
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消耗换行符
            switch (choice) {
                case 1:
                    addStudent(studentList, scanner);
                    break;
                case 2:
                    removeStudent(studentList, scanner);
                    break;
                case 3:
                    findStudent(studentList, scanner);
                    break;
                case 4:
                    printAllStudents(studentList);
                    break;
                case 5:
                    System.out.println("感谢使用,系统退出。");
                    scanner.close();
                    return;
                default:
                    System.out.println("无效的选择,请重新输入!");
            }
        }
    }
    // 添加学生
    private static void addStudent(ArrayList<Student> list, Scanner scanner) {
        System.out.print("请输入学号: ");
        String id = scanner.nextLine();
        System.out.print("请输入姓名: ");
        String name = scanner.nextLine();
        System.out.print("请输入年龄: ");
        int age = scanner.nextInt();
        scanner.nextLine(); // 消耗换行符
        list.add(new Student(id, name, age));
        System.out.println("学生添加成功!");
    }
    // 删除学生 (使用迭代器安全删除)
    private static void removeStudent(ArrayList<Student> list, Scanner scanner) {
        System.out.print("请输入要删除学生的学号: ");
        String id = scanner.nextLine();
        Iterator<Student> iterator = list.iterator();
        boolean found = false;
        while (iterator.hasNext()) {
            Student s = iterator.next();
            if (s.getId().equals(id)) {
                iterator.remove(); // 使用迭代器的remove方法
                found = true;
                System.out.println("学号为 " + id + " 的学生已删除。");
                break;
            }
        }
        if (!found) {
            System.out.println("未找到学号为 " + id + " 的学生。");
        }
    }
    // 查找学生
    private static void findStudent(ArrayList<Student> list, Scanner scanner) {
        System.out.print("请输入要查找学生的学号: ");
        String id = scanner.nextLine();
        for (Student s : list) {
            if (s.getId().equals(id)) {
                System.out.println("找到学生: " + s);
                return;
            }
        }
        System.out.println("未找到学号为 " + id + " 的学生。");
    }
    // 打印所有学生
    private static void printAllStudents(ArrayList<Student> list) {
        if (list.isEmpty()) {
            System.out.println("当前没有学生信息。");
        } else {
            System.out.println("--- 所有学生信息 ---");
            for (Student s : list) {
                System.out.println(s);
            }
        }
    }
}

总结与建议

  1. 理解而非背诵:上面的代码和思路是为了帮助你理解每个实验的核心概念,请务必自己动手敲一遍,并尝试修改、扩展功能,这样才能真正掌握。
  2. 调试能力:遇到错误时,学会阅读编译器错误信息,并使用System.out.println()或IDE的调试功能来追踪代码的执行流程。
  3. 代码规范:养成良好的编码习惯,如类名首字母大写、方法名和变量名驼峰命名、适当的注释等。
  4. 面向对象思想:从实验二开始,就要时刻思考“这个实体有什么属性?能做什么行为?”,这是Java编程的精髓。

希望这份详细的实验指导能对你的Java学习有所帮助!祝你实验顺利!

分享:
扫描分享到社交APP
上一篇
下一篇