ООП в Java: проблема с конструктором и методами - PullRequest
0 голосов
/ 01 июля 2019

Я новичок в 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);            

    }       

}

Требуется создать объекты sum и div с помощью конструктора Compare, который будет равен n1 плюс n2, с соответствующим методом или делением plus.

Ответы [ 5 ]

1 голос
/ 01 июля 2019

Возможно, здесь вы хотите новое сравнение, содержащее сумму.

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

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

Это также подразумевается при ожидании объекта сравнения, а не типа int, как показано.

Счто Compare станет неизменным, что очень хорошо, так как вы можете без проблем обмениваться объектами в различных переменных (изменение значения одной переменной при изменении значений других переменных).

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

public int intValue() {
    return number;
}
0 голосов
/ 01 июля 2019

Я предлагаю вам прочитать простые классы 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;
        }
    }
}
0 голосов
/ 01 июля 2019

Методы plus и div принимают int и возвращают int, и вы пытаетесь получить их выходные данные в объекте Compare. Кроме того, isLargerThan занимает int, а не Compare.

0 голосов
/ 01 июля 2019

Проблема здесь:

Сравните сумму = n1.plus (n2);

Сравнить div = n1.div (n2);

методы: plus и div возвращают int значение, не являющееся объектом класса Compare.

public int plus (int x) { вернуть this.number + x; }

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

}        
0 голосов
/ 01 июля 2019

Проблема здесь для методов «плюс», «div», «isLargerThan» и «isEqualTo» в классе «Compare» тип аргумента / возврата имеет тип «int». Но в «основной» функции вы передаете объект и ожидаете объект типа «Сравнить».

Чтобы исправить это, либо измените тип аргумента / возвращаемого значения на «Сравнить» для этих методов в классе «Сравнить», либо передайте значение «int» в качестве параметра и получите значение «int» в функции «main».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...