乔治爱啃脚趾 发表于 2023-10-27 20:41:53

java重写equals

构造手机类,包含其配置信息:型号(字符串)、内存大小(整数)、存储空间(整数,GB为单位)、价格(整数)。提供带参数的构造函数,重写其equals方法,使得两个相同配置(型号、内存、存储相同即可,价格可不同)的手机为相等的手机。重写其toString函数,打印手机的配置信息,形式为CellPhone
main函数中从键盘读入两个手机对象,比较他们是否相等,输出他们的配置信息。

输入描述:
两个计算机对象,包含型号、内存、存储空间、价格

输出描述:
两个对象是否相等,两个对象的配置信息
输入样例:
在这里给出一组输入。例如:

P20 8 64 4999
P20 8 64 4999
输出样例:
在这里给出相应的输出。例如:

true
CellPhone
CellPhone
下面是我写的代码,重写equals那个有点问题,望指正。
import java.util.Objects;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      CellPhone c1 = new CellPhone(sc.next(),sc.nextInt(),sc.nextInt(),sc.nextInt());
      CellPhone c2 = new CellPhone(sc.next(),sc.nextInt(),sc.nextInt(),sc.nextInt());

      System.out.println(c1.equals(c2));
      System.out.println(c1);
      System.out.println(c2);

    }
}

/* 你的代码将被嵌在这里 */
class CellPhone{
    String a;
    int b;
    int c;
    int d;
    public CellPhone(String a,int b,int c,int d){
      this.a=a;
      this.b=b;
      this.c=c;
      this.d=d;
    }
    @Override
    public String toString(){
      return "CellPhone ";
    }
    @Override
    public boolean equals(Object obj){
      CellPhone c=(CellPhone) obj;
      if(this==c) {
            return true;
      }
      return false;
    }
}

isdkz 发表于 2023-10-27 20:42:00

重写equals方法时,需要比较两个对象的型号、内存和存储空间是否相同。你的代码中,只是简单地比较了两个对象的引用是否相同,这是不正确的。下面是修改后的代码:

import java.util.Objects;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      CellPhone c1 = new CellPhone(sc.next(), sc.nextInt(), sc.nextInt(), sc.nextInt());
      CellPhone c2 = new CellPhone(sc.next(), sc.nextInt(), sc.nextInt(), sc.nextInt());

      System.out.println(c1.equals(c2));
      System.out.println(c1);
      System.out.println(c2);
    }
}

class CellPhone {
    String model;
    int memory;
    int storage;
    int price;

    public CellPhone(String model, int memory, int storage, int price) {
      this.model = model;
      this.memory = memory;
      this.storage = storage;
      this.price = price;
    }

    @Override
    public String toString() {
      return "CellPhone ";
    }

    @Override
    public boolean equals(Object obj) {
      if (this == obj) {
            return true;
      }
      if (obj == null || getClass() != obj.getClass()) {
            return false;
      }
      CellPhone other = (CellPhone) obj;
      return Objects.equals(model, other.model) &&
                memory == other.memory &&
                storage == other.storage;
    }
}


在重写equals方法中,首先判断两个对象的引用是否相同,如果相同则返回true。然后判断传入的对象是否为null或者不是CellPhone类的实例,如果是则返回false。最后比较两个对象的型号、内存和存储空间是否相同,使用Objects.equals方法来比较字符串的相等性,使用==运算符来比较整数的相等性。如果都相等,则返回true,否则返回false。

Mike_python小 发表于 2023-10-27 20:43:10

你的代码中,equals方法的实现有一点问题。在equals方法中,应该比较两个对象的型号(a)、内存大小(b)和存储空间(c)是否相等,如果相等则返回true,否则返回false。以下是修改后的代码:

java
import java.util.Objects;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      CellPhone c1 = new CellPhone(sc.next(), sc.nextInt(), sc.nextInt(), sc.nextInt());
      CellPhone c2 = new CellPhone(sc.next(), sc.nextInt(), sc.nextInt(), sc.nextInt());
      
      System.out.println(c1.equals(c2));
      System.out.println(c1);
      System.out.println(c2);
    }
}

class CellPhone {
    String model;
    int memory;
    int storage;
    int price;
   
    public CellPhone(String model, int memory, int storage, int price) {
      this.model = model;
      this.memory = memory;
      this.storage = storage;
      this.price = price;
    }
   
    @Override
    public String toString() {
      return "CellPhone ";
    }
   
    @Override
    public boolean equals(Object obj) {
      if (this == obj) {
            return true;
      }
      if (obj == null || getClass() != obj.getClass()) {
            return false;
      }
      
      CellPhone other = (CellPhone) obj;
      return Objects.equals(model, other.model)
                && memory == other.memory
                && storage == other.storage;
    }
}


这样修改后,equals方法会比较两个手机对象的型号、内存大小和存储空间是否相等,如果相等则返回true,否则返回false。在toString方法中,打印出手机的配置信息。

请注意保持代码的格式整齐,并确保输入输出的格式与题目描述一致。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: java重写equals