Java中的三元运算符

时间:2014-08-02 23:51:28

标签: java recursion ternary-operator

我正在尝试使用我从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);
}

通过声明+未定义来给我一个错误。如果有人能够指出我的错误在哪里,那将非常感激!

3 个答案:

答案 0 :(得分:3)

您的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时,在三元表达式之外分配{{1}}是完全没有意义的,因为您无法使用中间分配。

答案 1 :(得分:0)

在C中也不正确。三元运算符求值为所选表达式,因此不要在其中指定(只分配结果),并且您明确希望方法返回int。更改返回类型和return result(或完全消除变量,只返回三元表达式的值)。

答案 2 :(得分:0)

变化:

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

要:

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

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