Перегрузка метода в Java, как прочитать переменную в variable.method для объявления метода? Джава - PullRequest
0 голосов
/ 24 июня 2019

Я хочу создать метод с именем плюс, который добавляет переменную i1 к i2. Однако я не понимаю, как я вызываю свой метод плюс с помощью переменной i1 в соответствии с приведенным ниже кодом (фрагмент кода 2). Сначала я думал сделать это так (но не могу из-за инструкций):

public class Int{
        public static voind main(String[] args){
        Int i1 = new Int(5); 
        Int i2 = new Int(2);  
        Int sum = plus(i1, i2);
        }
        public static int plus(int i1, int i2) {
         int sum = i1 + i2;
        return sum;
        }
        System.out.prinln("Sum of i1 and i2 is " + sum);
}

Я попытался создать функцию plus (int i1, int i2) таким же образом, как и в коде выше, но затем я получил следующую ошибку: Метод plus (int, int) в типе Int не применим для Аргументы (Int)

Я тогда попробовал это:

public class Int {
        public Int(int i) {
        // TODO Auto-generated constructor stub
    }
        public static void main(String[] args) {
        Int i1 = new Int(5); //cannot be changed to due assignment instructions
        Int i2 = new Int(2);  //cannot be changed to due assignment instructions
        Int sum = i1.plus(i2);  //cannot be changed to due assignment instructions
        }
        public static int plus(int i2) {
         int sum = i1 + i2;
        return sum;
        }

}

Но получите ошибку В методе plus: i1 не может быть преобразован в переменную

Желаемый результат: сумма i1 и i2 равна Int (7)

Ответы [ 3 ]

1 голос
/ 24 июня 2019

i1 и i2 являются объектами класса Int, поэтому их нельзя суммировать следующим образом. Я предлагаю вам добавить атрибут «значение» в классе Int, назначить значение в конструкторе и затем суммировать это значение в вашем методе plus

1 голос
/ 24 июня 2019

Чтобы получить синтаксис Int sum = i1.plus(i2), вам нужен метод, который:

  • - это экземплярный (т.е. нестатический) метод
  • принимает Int в качестве параметра
  • возвращает Int

В частности, plus должен вычислить сумму 2 Int s и вернуть новый Int.

Кроме того, вам придется переопределить метод toString для Int, чтобы он возвращал строковое представление обернутого int при печати. ​​

Говоря о переносимом int, ваш класс Int, похоже, не имеет базового поля int, в котором хранится int, переданное в конструктор. В настоящее время вы просто игнорируете все, что передается в конструктор, что не кажется хорошей идеей.

Исходя из вышеизложенного, Int должен выглядеть примерно так:

class Int {
    private int wrapped;

    public Int(int wrapped) {
        this.wrapped = wrapped;
    }

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

    public Int plus(Int other) {
        int sum = this.wrapped + other.wrapped;
        return new Int(sum);
    }
}
1 голос
/ 24 июня 2019

Я предполагаю, что у вашего Int класса есть какой-то член i, содержащий значение соответствующих экземпляров Int.Этот член может быть доступен как this.i в любом методе класса Int.

Кроме того, в вашем методе main вы вызываете plus с i2 в качестве аргумента.i2 является экземпляром Int, но подпись вашего метода запрашивает int (примитив).

И, наконец, вы хотите получить доступ к информации об экземпляре Int, то есть вы, вероятно, нене хочу делать ваш метод static, но нужен метод экземпляра.

Учитывая все вышеперечисленное, ваш метод может выглядеть следующим образом:

public int plus(Int i2) {
  int sum = this.i + i2.i;
  return sum;
}
...