在return内部编写if语句

时间:2019-04-25 15:49:35

标签: java

我想用Java编写一个计算平方根的程序,并且不允许使用数学模块

我的代码是

public class Quadratwurzel

public static double quadratwurzel(double x, int n) {
return(if (n == 0){x+1/2} else{0.5*quadratwurzel(x,n-1)+x/quadratwurzel(x,n-1)})}

我希望有人能解释我为什么不能在return内编写if / else语句,因为在我的演讲笔记中它说我们必须在return内编写语句,并且该语句被参数替换。

即,如果我启动方法或函数

quadratwurzel(32.0,6)

然后将return内部的函数主体替换为:

(32.0,6)

而且因为

6!=1,5!=1,...2!=1

该方法将再次递归启动5次,直到终止为止。

这是我的主意,我想知道为什么这里的替换不能那样工作。

我希望有人能帮忙给我这个想法的正确代码

8 个答案:

答案 0 :(得分:4)

我相信您正在寻找三元运算符:

return condition ? value1 : value2;

答案 1 :(得分:4)

The syntax for return需要an expressionif语句is a statement,因此不能用作return表达式的目标。

这意味着您需要将代码更改为此:

public static double quadratwurzel(double x, int n) {
    if (n == 0) {
        return x + 1 / 2;
    } else {
        return 0.5 * quadratwurzel(x, n - 1) + x / quadratwurzel(x, n - 1);
    }
}

请注意,这里存在整数除法问题,我必须作为练习留给读者。

答案 2 :(得分:3)

您可以使用条件语句,这有点难于阅读if语句。

return n == 0 ? x+1/2 : 0.5*quadratwurzel(x,n-1)+x/quadratwurzel(x,n-1);

答案 3 :(得分:2)

您需要在此处使用条件运算符。进一步了解此link

return n == 0 ? x+1/2 : (0.5*quadratwurzel(x,n-1)+x/quadratwurzel(x,n-1)); 

答案 4 :(得分:1)

这是解决您问题的代码。我无法测试它是否产生预期的结果,因为我没有完整的程序。

public class Quadratwurzel

public static double quadratwurzel(double x, int n) {
    if (n == 0){
        return (x+1/2);
    }else{
        return 0.5*quadratwurzel(x,n-1)+x/quadratwurzel(x,n-1);
    }}

之所以不能放入if语句是return的原因是因为return需要要返回的内容,也就是说,它仅知道如何反馈值或对象。它无法“思考”或执行if语句中的逻辑。对于Java编程语言(与您的请求一致),这是正确的,但对于Python之类的其他语言,则不是这样,如以下注释中的@所示。

因此,在发出return语句之前,您必须确定必须返回什么 ,这就是我在上面编辑代码的方式。

更新至操作注释 “因此,我不明白为什么if / else语句不是表达式。您能告诉我表达式和语句之间的区别是什么吗?如果... else也返回值。为什么说它没有产生价值?”

一种描述语句与表达式的非常简单的方法是: 声明做某事,它将完成一项操作。因此,在IF condition THEN action的示例中,if statement 执行评估逻辑条件并返回值的操作。表达式是具有值的东西,例如:2False5+3

对于每个this article,考虑它的一个好方法是可以打印它或将其分配给变量,它是一个表达式。否则,这是一条语句。

答案 5 :(得分:1)

您可以使用简单的三元运算

return n == 0 ? //
    x + 1/2 : //
    0.5 * quadratwurzel(x, n - 1) + x / quadratwurzel(x, n - 1);

// NB: I usually use formatting (here, with double slash comments) to ease code reading

答案 6 :(得分:-1)

可以,但是使用错误。

public int foo(int a, int b){
        return a > b ? a + b : a - b;
    }

a> b后跟一个?是有条件的,是?之后的第一个短语?是条件为true时返回的内容,第二部分::之后为条件为false时返回的内容。

答案 7 :(得分:-1)

您可以使用

return (n == 0) ? (x+1/2) : (0.5*quadratwurzel(x,n-1)+x/quadratwurzel(x,n-1)); 

    public static double quadratwurzel(double x, int n) {
        if (n != 0){
            double quadratwurzel_val = quadratwurzel(x,n-1);
            return 0.5*quadratwurzel_val+x/quadratwurzel_val;
        }
        return (x+1/2);
    }

但是第二种方法更好,因为它不会两次调用quadratwurzel(x,n-1)