繁体   English   中英

Java 中的 OOP:构造函数和方法的问题

[英]OOP in Java: problem with constructor and methods

我是 Java 新手,我正在尝试编写一个带有构造函数和方法的类,这些方法可以将两个数字相加和相除,并比较一个对象是否大于或等于另一个对象。 但是我收到一个错误: The method plus(int) in the type Compare is not applicable for the arguments (Compare) 怎么了?

这是代码:

public class Compare {
    // fields
    private int number;
    private int plus;
    private double div; 

    // constructor
    public Compare (int n) {
        number = n;
    }


    public int plus (int x) {
        return this.number + x;
    }

    public int div (int x) {
        return this.number / x;
    }   

    public boolean isLargerThan (int x) {
        return this.number > x;
    }       

    public boolean isEqualTo (int x) {
        return this.number == x;
    }           

    public static void main(String[] args) {
        Compare n1 = new Compare(9);
        Compare n2 = new Compare(4);

        Compare sum = n1.plus(n2);

        Compare div = n1.div(n2);

        boolean check1 = sum.isLargerThan(n1);

        boolean check2 = div.isLargerThan(n2);

        boolean check3 = div.isEqualto(sum);            

    }       

}

要求是使用等于 n1 加 n2 的比较构造函数创建 sum 和 div 对象,并使用 plus 方法或除法(视情况而定)。

可能是在这里您想要一个包含总和的新比较。

public Compare plus (int x) {
    return new Compare(number + x);
}

public Compare plus (Compare x) {
    return new Compare(number + x.number);
}

这也暗示着需要一个 Compare 对象,而不是如图所示的 int。

使用该Compare将变得不可变,这非常好,因为您可以毫无问题地共享不同变量中的对象(更改一个变量的值更改其他变量的值)。

@Override
public String toString() {
    return Integer.toString(number);
}

public int intValue() {
    return number;
}

这里的问题是对于“Compare”类中的“plus”、“div”、“isLargerThan”和“isEqualTo”方法,参数/返回类型是“int”类型。 但是在“main”函数中,您正在传递对象并期望“Compare”类型的对象。

要修复它,请将“Compare”类中这些方法的参数/返回类型更改为“Compare”,或者将“int”值作为参数传递并在“main”函数中获取“int”值。

问题在这里:

比较 sum = n1.plus(n2);

比较 div = n1.div(n2);

方法: plusdiv返回int值而不是类Compare的对象。

public int plus (int x) { return this.number + x; }

public int div (int x) { return this.number / x; }


Add getter method in Compare Class.

public int getNumber(){
return number;
}

使用下面的代码并尝试运行:

public static void main(String[] args) {
    Compare sum = new Compare(9);
    Compare divObj = new Compare(4);

    sum.plus(n2);

    divObj.div(n2);

    boolean check1 = sum.isLargerThan(sum.getNumber());

    boolean check2 = divObj.isLargerThan(divObj.getNumber());

    boolean check3 = divObj.isEqualto(sum.getNiumber());            

}        

plusdiv方法接受一个int并返回一个int并且您试图在Compare对象中接收它们的输出。 此外, isLargerThan需要一个int而不是Compare

我建议您阅读简单的 Java 类并阅读教程。

为了清楚起见,我创建了一个类似于您的目标的简单类和应用程序。

package stackoverflow;

public class CompareExample {

    public static void main(String[] args) {

        MyNumber one = new MyNumber(1);
        MyNumber two = new MyNumber(2);
        MyNumber three = new MyNumber(3);
        MyNumber four = new MyNumber(4);
        MyNumber five = new MyNumber(5);

        one.add(two);
        System.out.println(one);

        two.substract(three);
        System.out.println(two);

        int comparison = four.compareTo(five);

        if(comparison > 0) {
            System.out.println("gr");
        }
        else if(comparison < 0) {
            System.out.println("ls");
        }
        else {
            System.out.println("eq");
        }

    }  

    static class MyNumber{
        private int number;

        public MyNumber(int number) {
            this.number = number;
        }

        public void add(MyNumber that) {
            this.number += that.number;
        }

        public void substract(MyNumber that) {
            this.number -= that.number;
        }

        public int compareTo(MyNumber that) {
            return this.number - that.number;
        }

        @Override
        public String toString() {
            return "MyNumber -> Value:" + number;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM