代码之家  ›  专栏  ›  技术社区  ›  tavalendo

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

  •  -2
  • tavalendo  · 技术社区  · 5 年前

    我是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);            
    
        }       
    
    }
    

    要求是使用compare构造函数创建sum和div对象,该构造函数将等于n1加n2,并根据需要使用plus方法或除法。

    5 回复  |  直到 5 年前
        1
  •  1
  •   Joop Eggen    5 年前

    可能您需要一个新的比较,包含总和。

    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;
    }
    
        2
  •  0
  •   Rathish Kannan    5 年前

    这里的问题是对于“compare”类中的“plus”、“div”、“islargerthan”和“isequalto”方法,参数/返回类型是“int”类型。但在“main”函数中,传递的是对象,而期望的是“compare”类型的对象。

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

        3
  •  0
  •   Ahmed Tawila    5 年前

    这个 plus div 方法采用 int 并返回一个 int 你试图在 Compare 对象。也, isLargerThan 采取一个 int 而不是 比较 .

        4
  •  0
  •   Chetan Joshi weird    5 年前

    问题在于:

    比较和=n1.加(n2);

    比较div=n1.div(n2);

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

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

    公共int div(int x){ 返回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());            
    
    }        
    
        5
  •  0
  •   mahmutoflaz    5 年前

    我建议您阅读简单的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;
            }
        }
    }