Почему этот код вызывает ошибку invalidAssignmentOperator для операторов * и +? - PullRequest
0 голосов
/ 26 апреля 2019

Почему этот код вызывает ошибку invalidAssignmentOperator для операторов * и +?

public static Function<Integer, Double> tariff = t -> {
    if (t = 500) {
        t * t;
    } else {
        t + t; 
    }
};

Ответы [ 3 ]

2 голосов
/ 26 апреля 2019

Есть несколько проблем с вашим кодом:

  1. Необходимость проверки равенства ==: t=500 должно быть t==500

  2. Когда у вас есть сложный код, такой как лямбда, оператор return не является неявным: поэтому t*t не возвращает неявно.

  3. Умножая / добавляя два целых числа, вы пытаетесьвернуть значение integer, в то время как ожидаемый тип возврата равен double, поэтому проблемы с компиляцией возникают.

Примерно так будет работать:

  public static Function<Integer, Integer> tariff = t -> {
    if (t == 500) {
      return t * t;
    } else {
      return t + t;
    }
  };

Неявный возвратбудет работать для чего-то вроде этого:

  public static Function<Integer, Integer> tariff = t -> (t == 500) ? t * t : t + t;

0 голосов
/ 26 апреля 2019

Ваша функция генерирует invalidAssignmentOperator, потому что вы фактически не присваиваете t*t или t+t чему-либо.Вы можете попробовать использовать t*=t и t+=t, чтобы он фактически присвоил t

Ваш метод также не возвращает ничего, и должен.Еще лучшим решением моей идеи, приведенной выше, было бы просто вернуть эти значения:

 public static Function<Integer, Double> tariff = t -> {
    if(t=500) {
        return t*t;
    } else {
        return t+t;
    }
};

Кроме того, убедитесь, что ваш код правильно размещен, как показано моим кодом.Это облегчает чтение.

0 голосов
/ 26 апреля 2019
  • Использование скобок {} требуется ключевое слово return
  • Сравнение типов примитивов выполняется с ==, а не с =
  • Как вы просите Doubleв качестве вывода вам нужно привести (double), потому что int*int > int (то же самое для +) ИЛИ используйте Function<Integer, Integer>
Function<Integer, Double> tariff = t -> {
    if(t==500) {
        return (double)t*t;
    } else {
        return (double)t+t;
    }
};

Для упрощениямог сделать:

Function<Integer, Double> tariff = t -> t==500 ? t*t : t+t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...