我正在尝试使用我从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);
}
通过声明+
未定义来给我一个错误。如果有人能够指出我的错误在哪里,那将非常感激!
答案 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);
运算符内部是什么?:是“结果”的可能值。