用equals 方法比较两个数字的大小

import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input1 = scanner.nextInt();
int input2 = scanner.nextInt();
SimpleInteger n1 = new SimpleInteger(input1);
SimpleInteger n2 = new SimpleInteger(input2);
System.out.println("n1's value is "+n1.getValue());
System.out.println("n1 is even? " + n1.isEven());
System.out.println("n1 is odd? " + n1.isOdd());
System.out.println("n1 is prime? " + n1.isPrime());
System.out.println("n1 equals n2? "+n1.equals(n2));
}
}

class SimpleInteger{
private int value;
public int getValue(){
return value;
}
public SimpleInteger(int value){
this.value = value;
}
public boolean isPrime(){
int i;
if(value==1){
return false;
}
else {
for (i = 2; i < value; i++) {
if (value % i == 0)
return false;
}
}
if(i==value){
return true;
}
else{
return false;
}
}
public boolean isEven(){
if(value%2==0)
{
return true;
}
else
{
return false;
}
}
public boolean isOdd(){
if(value%2==0)
{
return false;
}
else
{
return true;
}
}
/*public boolean equals(SimpleInteger n2){

}*/

}
如果equals方法这么写:
public boolean equals(int n2){
if(value == n2){
return true;
}
else{
return false;
}
}
当输入两个相同的数字时也会输出false, 在不改变主函数的情况下应该怎么改,才能正确输出,麻烦帮忙修改一下

把equals方法的参数变为SimpleInteger类型即可,因为如果是int类型,就自动调用了Object类的equals方法了, 可以在原来代码的equals加一个打印语句,测试其是否被调用就知道了,修改如下:

参考链接:
java小笔记(重写equals)_CHSN的博客-CSDN博客_java重写equals方法


import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        int input1 = scanner.nextInt();
        int input2 = scanner.nextInt();
        
        SimpleInteger n1 = new SimpleInteger(input1);
        SimpleInteger n2 = new SimpleInteger(input2);
        
        System.out.println("n1's value is "+n1.getValue());
        System.out.println("n1 is even? " + n1.isEven());
        System.out.println("n1 is odd? " + n1.isOdd());
        System.out.println("n1 is prime? " + n1.isPrime());
        System.out.println("n1 equals n2? "+n1.equals(n2));
    }
}

class SimpleInteger{
    
    private int value;
    public int getValue(){
        return value;
    }
    public SimpleInteger(int value){
        this.value = value;
    }
    
    public boolean isPrime(){
        int i;
        if(value==1){
            return false;
        }
        else {
            for (i = 2; i < value; i++) {
                if (value % i == 0)
                    return false;
                }
        }
        
        if(i==value){
            return true;
        }
        else{
            return false;
        }
    }
    
    public boolean isEven(){
        if(value%2==0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    
    public boolean isOdd(){
        if(value%2==0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    /*public boolean equals(SimpleInteger n2){
    
    }*/


    public boolean equals(SimpleInteger n2){
        //System.out.println("equals is run!");
        if(value == n2.getValue()){
            return true;
        }
        else{
            return false;
        }
    }
    
}



img

因为你定义的equals函数的参数是int类型,但是在mai函数中n1.equals(n2)传参的时候,参数类型是SimpleInteger 类型的n2,所以会出错。
有两种修改方法(选其中一个即可):
方法一:修改main函数中的调用,把 System.out.println("n1 equals n2? "+n1.equals(n2)); 改为:

System.out.println("n1 equals n2? "+n1.equals(n2.getValue()));

方法二:
修改equal函数的参数,在SimpleInteger 类中,将public boolean equals(int n2) 函数改为:

public boolean equals(SimpleInteger n2){
if(value == n2.getValue() return true;
else return false;
}

equal这样写就可以了


    public boolean equals(SimpleInteger n2){
        return this.value == n2.getValue();
    }