Java返回命令[关闭]
Posted
技术标签:
【中文标题】Java返回命令[关闭]【英文标题】:Java return command [closed] 【发布时间】:2015-04-19 23:58:48 【问题描述】:所以这里有我从教科书中复制的代码。我不完全理解 factorial(k) 是如何得到它的数字的,因为只有 factorial(n) 有一个计算它的值的方法。
public void run()
int n = readInt("Enter the number of objects, n, in the set: ");
int k = readInt("Enter numberto be chose,k, :");
println("C("+ n + ", " + k + ") = " + combinations(n, k));
private int combinations(int n, int k)
return factorial(n) / (factorial(k) * factorial(n-k));
private int factorial(int n)
int result = 1;
for(int i = 1; i <= n; i++)
result*= i;
return result;
【问题讨论】:
什么...?他们称它们为相同的方法,只是输入不同。我对你的困惑感到困惑。编辑:我想我看到了你的困惑。在combinations
中传入的n
与作为factorial
参数的n
相比,是一个完全 不同的变量。请阅读范围!
观察形参和实参之间的区别 - 前者只是一个占位符,具体词汇化在调用站点不起作用!
如果你调用 factorial(3) 调用会去哪里?阶乘(5)去哪儿了?阶乘(n)?想想吧。
@collapsar。神圣词汇化蝙蝠侠你刚才说什么?
@AndyBrown 无论是调用factorial(n)
还是factorial(k)
,参数总是映射到private int factorial(int n)
中的n
。措辞可能有点过于复杂...... ;-)
【参考方案1】:
观察参数和参数的区别:
return factorial(n) / (factorial(k) * factorial(n-k));
这里的第一个n
是一个参数 - 一个传递给被调用函数的值。
private int factorial(int n)
这里n
是一个参数 - 一个占位符,用于定义函数在使用参数调用时应该做什么。如果你无法表达函数应该用这个参数做什么,那么传递一个参数有什么用?
【讨论】:
完美 - 您的解释与大多数 Java Tutorials about arguments and parameters 相符。 FWIW 我认为 OP 的其他混淆是关于范围 - 即在方法中声明的变量在原始方法调用的方法中不可见。【参考方案2】:你被函数调用和函数定义弄糊涂了。
return factorial(n) / (factorial(k) * factorial(n-k));
行调用具有不同值(n
、n-k
和 k
)的名为 factorial
的函数。
以private int factorial(int n)
开头的行定义n
的任何给定值的函数。 n
是一个变量,表示调用传递的值。
如果您使用值 10 和 4(分别)调用 combination
,那么它会分别使用 10、4 和 6 调用 factorial
。第一个调用将 10 绑定到 n(阶乘的形参),第二个 4 绑定到 n(形参),第三个 6 绑定到 n(形参)。
一定义,三用。
【讨论】:
以上是关于Java返回命令[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
自动退出 Telnet 命令返回提示,无需人工干预 ^] quit 关闭退出代码 1
设计:Java 和在 setter 方法中返回自引用 [关闭]