Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的OOP:构造函数和方法的问题_Java_Oop_Methods_Constructor - Fatal编程技术网

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

Java中的OOP:构造函数和方法的问题,java,oop,methods,constructor,Java,Oop,Methods,Constructor,我是Java新手,我正在尝试用构造函数和方法编写一个类,该类可以对两个数字进行加法和除法,还可以比较一个对象是否大于或等于另一个对象。但是我得到了一个错误:类型比较中的方法plus(int)不适用于参数(Compare)。怎么了 代码如下: public class Compare { // fields private int number; private int plus; private double div; // constructor

我是Java新手,我正在尝试用构造函数和方法编写一个类,该类可以对两个数字进行加法和除法,还可以比较一个对象是否大于或等于另一个对象。但是我得到了一个错误:
类型比较中的方法plus(int)不适用于参数(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);            

    }       

}
要求使用比较构造函数创建sum和div对象,该构造函数将等于n1加n2,并使用加号方法或除法(如适用)。

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

要解决此问题,请将“Compare”类中那些方法的参数/返回类型更改为“Compare”,或者将“int”值作为参数传递,并在“main”函数中获取“int”值

问题在于:

比较总和=n1加上(n2)

比较div=n1.div(n2)

方法:
plus
div
返回
int
值不是类对象
Compare

公共整数加(整数x){ 返回这个.number+x; }

公共内部分区(内部x){ 返回此.number/x; }



使用以下代码并尝试运行:

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());            

}        

这里可能需要一个新的比较,包含总和

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

public Compare plus (Compare x) {
    return new Compare(number + x.number);
}
这也意味着需要一个比较对象,而不是如图所示的int

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


plus
div
方法获取
int
并返回
int
,您试图在
Compare
对象中接收它们的输出。另外,
isLargerThan
int
而不是
比较

我建议您阅读简单的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;
        }
    }
}
包堆栈溢出;
公共类比较示例{
公共静态void main(字符串[]args){
MyNumber 1=新的MyNumber(1);
MyNumber 2=新的MyNumber(2);
MyNumber 3=新的MyNumber(3);
MyNumber 4=新的MyNumber(4);
MyNumber 5=新的MyNumber(5);
一.增加(二);
系统输出打印项次(一);
二、减(三);
System.out.println(两个);
整数比较=四。比较到(五);
如果(比较>0){
系统输出打印项次(“gr”);
}
否则如果(比较<0){
系统输出打印项次(“ls”);
}
否则{
系统输出打印项次(“eq”);
}
}  
静态类MyNumber{
私有整数;
公共MyNumber(整数){
这个数字=数字;
}
公共作废添加(我的编号){
this.number+=that.number;
}
公共无效减记(我的编号){
this.number-=that.number;
}
公共整数比较(我的编号){
返回this.number-that.number;
}
@凌驾
公共字符串toString(){
返回“MyNumber->Value:”+number;
}
}
}

布尔校验1=sum.isLargerThan(n1),n1的类型是什么?通过定义
公共布尔isLargerThan(int x)您期望得到什么{
?n1必须通过比较初始化。这样方法才能应用于它。方法public boolean islarger大于应用于n1,以便与n2或通过比较初始化的任何对象进行比较。SMA的意思是,您声明方法采用
整数
,但您将
比较
传递给它。您期望得到什么当您这样做时,编译器要做什么?我添加了一个
toString
方法,在执行
System.out.println(n1);
否则将使用父类
Object.toString()
来打印内存中对象的类名+'@'加上“地址”。
@Override
public String toString() {
    return Integer.toString(number);
}

public int intValue() {
    return number;
}
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;
        }
    }
}