java重写equals
构造手机类,包含其配置信息:型号(字符串)、内存大小(整数)、存储空间(整数,GB为单位)、价格(整数)。提供带参数的构造函数,重写其equals方法,使得两个相同配置(型号、内存、存储相同即可,价格可不同)的手机为相等的手机。重写其toString函数,打印手机的配置信息,形式为CellPhonemain函数中从键盘读入两个手机对象,比较他们是否相等,输出他们的配置信息。
输入描述:
两个计算机对象,包含型号、内存、存储空间、价格
输出描述:
两个对象是否相等,两个对象的配置信息
输入样例:
在这里给出一组输入。例如:
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;
}
} 重写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。 你的代码中,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]