为什么此代码为什么在*和+运算符上引发invalidAssignmentOperator错误?

时间:2019-04-26 17:09:07

标签: java function lambda

为什么此代码为什么在*和+运算符上引发invalidAssignmentOperator错误?

<div id="container">
  <div>
    <img src='https://images.pexels.com/photos/853168/pexels-photo-853168.jpeg?auto=compress&cs=tinysrgb&dpr=1&w=500' />
  </div>
  <div>
    <img src='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRWNjJlrLa7zz1sxYt9pabVcLkdO3rBucsFDACJRqifXknjU1xV' />
  </div>
  <div>
    <img src='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQx2AX6jE_BuRr1_Bce2isaDKwv7ZtBiG9Rlwo4VuMZNqRMkV_L' />
  </div>
  <div>
    <img src='https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTg4Il-0K1k0wgK_47FURvRl9-K7sjPvK8_DefbmrOVMdxcPOcE' />
  </div>
</div>

3 个答案:

答案 0 :(得分:2)

您的代码有几个问题:

  1. 平等检查需求==t=500应该是t==500

  2. 当您具有lambda这样的复杂代码时,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;

答案 1 :(得分:0)

  • 使用方括号{}需要使用return关键字
  • 原始类型比较是通过==而不是=
  • 完成的
  • 当您要求输出Double时,您需要强制转换(double),因为int*int > int(与+相同) OR 使用{{ 1}}
Function<Integer, Integer>

为简化起见,您可以执行以下操作:

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

答案 2 :(得分:0)

您的函数抛出了invalidAssignmentOperator,因为您实际上并未将t*tt+t分配给任何东西。您可以尝试使用t*=tt+=t,以便将其实际分配给t

您的方法也不返回任何内容,应该返回任何内容。对于上述想法,更好的解决方案是只返回这些值:

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

此外,请确保按照我的代码所示正确地分隔代码。它使阅读变得更加容易。