Java中的三元运算符

Java中的三元运算符,java,recursion,ternary-operator,Java,Recursion,Ternary Operator,我试图用我从C语言编程中获得的知识来学习Java。在C语言中,我喜欢三元运算。我正试图在Java中应用这一点,但我不确定是否正确。对于以下将从1到n求和的递归方法,我有以下内容: 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 res

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

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);
}

这给了我一个错误,说明
+
未定义。如果有人能指出我的错误所在,我将不胜感激

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

您的
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 = (num == 1) ? result = 1 : result = num + sum(num - 1);
致:


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

sum
的返回类型为
void
。它可以工作,但它是错误的-在Java和C中都是如此。您不应该就地编辑它。这种情况改变了一切。
result = (num == 1) ? 1 : num + sum(num - 1);