java练习题-------对equals方法的重写

本文探讨了如何在Java中正确重写equals方法,以比较User类的name和password属性。通过示例代码解释了为什么不能直接使用空值属性进行equals比较,以及IDEA中自动生成equals方法的快捷方式。内容涵盖了Java对象相等性的概念和实践技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zh

题目 :创建一个User类 具有 name 和 password属性,重写它们的equals方法,比较俩对象的属性是相同

public class EqualsDemo {
    public static void main(String[] args) {
        User user1=new User(null,"123");
        User user2=new User(null,"123");
        System.out.println(user1.equals(user2));
    }
}
class User{
     private String name;
     private String password;
    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
    public User() {
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
public boolean equals(Object object){
    //先判断本对象与参数对象的位置是否相同,若相同,必为ture
    if(this==object) return true;
    //接着判断参数对象是否为空,必为false
    if(object==null) return false;
    //然后判断俩对象是不是同一类,若不是,必为false
    if(this.getClass()!=object.getClass()) return false;
    //如果进行到这步就说明俩对象是同一类,就需要对object进行强转变为User形
    User user= (User) object;
  //接着比较俩对象的属性是否相同
        //this.name为空
        if (this.name == null){
            if (user.name != null){
                return false;
            }
            //this.name不为空
        }else if(!this.name.equals(user.name)){
            return false;
        }
        //this.password为空
        if (this.password == null){
            if (user.password != null){
                return false;
            }
            //this.password不为空
        }else if(!this.password.equals(user.password)){
            return false;
        }
           return true;
       }
}

 有小伙伴可能会有疑问 能不能将俩对象属性的比较 改为 

  if (this.password != null && user.password == null || this.password == null && user.password != null)
               return false;
  if (!this.password.equals(user.password)) return false;

 这种情况是不行的,因为当this.passwor==null 时,它不能调用equals方法,会出现空指针异常。

还有一种更简单的方法重写equals,你只要在idea中右键单击选择Generate就可以选择equals方法了。(字体小,你需要仔细看)

<think>嗯,用户想找关于学生选课信息管理的PTA练习题或解决方案。首先,我需要回忆一下PTA常见的题目类型。PTA通常会有编程题,涉及学生类的设计、集合操作、文件读写等。比如,可能需要创建一个Student类,包含学号、姓名、课程列表等属性,然后实现添加课程、删除课程、查询信息等功能。 用户提到了PTA 6-1,可能这个题目需要处理学生对象集合,比如使用Set或List来存储,按要求输出信息。根据引用[2],题目可能涉及stuSet放入第四个学生后的对象个数,以及数组stus中的前三个学生的学号姓名。所以解决方案可能需要正确实现Student类的equalshashCode方法,确保集合操作正确。 另外,选课系统可能涉及选课逻辑,比如随机踢人、拼手速抢课,如引用[1]提到的。但用户需要的是PTA练习题,所以可能更关注代码实现而非系统设计。可能需要处理发,但PTA题目通常简化,用基础结构即可。 用户可能需要示例代码,比如Java中的Student类,使用HashSetArrayList,实现添加、删除、查询等方法。需要注意输出格式,比如学号姓名的拼接方式。此外,异常处理如课程已存在或不存在的情况也要考虑。 相关问题可能涉及数据结构的选用,如SetList的区别,或者如何优化查询效率。另外,文件操作可能也是PTA题目的一部分,比如从文件读取学生信息。需要确保代码符合题目要求的输入输出格式,特别是像PTA这样的自动化评测系统,格式必须严格匹配。</think>根据你的需求,我将从PTA练习题实现角度提供选课信息管理的设计方案代码示例: ### 一、学生选课系统核心功能 1. 学生类设计:需包含学号、姓名、已选课程集合 2. 课程管理:课程添加/删除/查询 3. 选课逻辑:处理课程冲突、容量限制等 4. 数据持久化:文件读写操作(PTA常见要求) ### 二、Java实现方案示例(适配PTA题型) ```java import java.util.*; class Student implements Comparable<Student> { private String id; private String name; private Set<String> courses = new HashSet<>(); public Student(String id, String name) { this.id = id; this.name = name; } // PTA常见要求的格式输出 @Override public String toString() { return id + ":" + name; } // 用于集合操作 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return id.equals(student.id); } @Override public int hashCode() { return Objects.hash(id); } // 实现Comparable接口用于排序 @Override public int compareTo(Student s) { return this.id.compareTo(s.id); } // 选课方法(PTA常见操作) public boolean addCourse(String course) { return courses.add(course); } // 退选方法 public boolean removeCourse(String course) { return courses.remove(course); } } public class CourseManagement { public static void main(String[] args) { Set<Student> stuSet = new HashSet<>(); List<Student> stus = new ArrayList<>(); // 添加测试数据(模拟PTA输入) Collections.addAll(stus, new Student("1001", "张三"), new Student("1002", "李四"), new Student("1003", "王五") ); // 添加第四个学生 stuSet.addAll(stus); Student newStu = new Student("1004", "赵六"); stuSet.add(newStu); // 输出题目要求的结果 System.out.println("stuSet size: " + stuSet.size()); System.out.println("First 3 students:"); stus.stream().limit(3).forEach(System.out::println); } } ``` ### 三、PTA常见考点解析 1. **集合操作**:使用`Set`自动去重,注意重写`equals()``hashCode()`[^2] 2. **排序实现**:通过`Comparable`接口实现对象排序 3. **数据封装**:严格遵循题目要求的输出格式(如`学号:姓名`) 4. **异常处理**:课程容量检查、重复选课判断等 ### 四、扩展实现建议 1. 文件读写操作(PTA常见附加要求): ```java // 从文件加载学生数据 public static List<Student> loadStudents(String filename) throws IOException { return Files.lines(Paths.get(filename)) .map(line -> new Student(line.split(",")[0], line.split(",")[1])) .collect(Collectors.toList()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值