【问题标题】:Ternary Operator in JavaJava中的三元运算符
【发布时间】:2014-09-25 20:19:21
【问题描述】:

我正在尝试使用我从 C 编程中获得的知识来学习 Java。在 C 中,我喜欢三元运算。我正在尝试在 Java 中应用它,但我不确定我是否做得正确。对于以下从1n 求和的递归方法,我有以下内容:

public static void main(String[] args){
    int n = 6;
    System.out.printf("sum of %d is %d ", n, new learn().sum(n));
}

public int sum(int num){
    int result;
    result = (num == 1) ? result = 1 : result = num + sum(num - 1);
}

这给了我一个错误,指出+ 是未定义的。如果有人能指出我的错误在哪里,那将不胜感激!

【问题讨论】:

  • sum 的返回类型为 void
  • 它有效,但它是错误的 - 在 Java 和 C 中。
  • 您不应该就地编辑它。这种改变一切。

标签: java recursion ternary-operator


【解决方案1】:

您的sum 方法当前的返回类型为void。因此它不能返回任何东西。在这种情况下,您不能像在

中那样使用方法调用表达式作为值
num + sum(..)
// or in
System.out.printf("sum of %d is %d ", n, new learn().sum(n));

改成

public int sum(int num) {
    return (num == 1) ? 1 : num + sum(num - 1);
}

得到你想要的行为。

当您在三元表达式外部分配result 时,在三元表达式内分配result 是完全没有意义的,因为您不能使用中间分配。

【讨论】:

    【解决方案2】:

    这在 C 中也不正确。三元运算符对选定的表达式求值,所以不要在其中赋值(只赋值结果),并且您显然希望您的方法返回一个int。更改返回类型和return result(或完全消除变量,只返回三元表达式的值)。

    【讨论】:

      【解决方案3】:

      变化:

      result = (num == 1) ? result = 1 : result = num + sum(num - 1);
      

      收件人:

      result = (num == 1) ? 1 : num + sum(num - 1);
      

      运算符里面是什么?:是“结果”的可能值。

      【讨论】:

        猜你喜欢
        • 2014-02-08
        • 2011-03-12
        • 2014-04-04
        • 1970-01-01
        • 2014-10-19
        • 1970-01-01
        • 1970-01-01
        • 2014-09-29
        相关资源
        最近更新 更多