我想用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次,直到终止为止。
这是我的主意,我想知道为什么这里的替换不能那样工作。
我希望有人能帮忙给我这个想法的正确代码
答案 0 :(得分:4)
我相信您正在寻找三元运算符:
return condition ? value1 : value2;
答案 1 :(得分:4)
The syntax for return
需要an expression。 if
语句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 执行评估逻辑条件并返回值的操作。表达式是具有值的东西,例如:2
或False
或5+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)