java逗号运算符在“eval()”中做什么?
我试图学习java,我在一个旧的UIL实践测试中遇到了这段代码,我不知道这段代码在做什么
d[i][j] = eval(d[i-1][j]+1
[i][j-1]+1, d[i-1][j-1] + cost); /* the commas confuse me, I don't know what to add to cost */
下面是完整的代码,如果有帮助的话
private static int eval(int a, int b, int c) {
int m;
m = a;
if (b < m)
m = b;
if (c < m)
m = c;
return m;
}
public static int comp(String s, String t) {
int d[][];
int n, m, i, j;
char si, tj, cost;
n = s.length();
m = t.length();
if (n == 0) {
return m;
}
if (m == 0) {
return n;
}
d = < * 1 >;
for (i = 0; i <= n; i++) {
d[i][0] = i;
}
for (j = 0; j <= m; j++) {
d[0][j] = j;
}
for (i = 1; i <= n; i++) {
si = s.charAt(i - 1);
for (j = 1; j <= m; j++) {
tj = t.charAt(j - 1);
if (si == tj) {
cost = 0;
} else {
cost = 1;
}
d[i][j] = eval(d[i - 1][j] + 1,
d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
}
}
return d[n][m];
}
# 1 楼答案
方法中的逗号用于分隔参数
如您所见
eval
方法需要树参数在你的代码示例中,你是这样调用它的
这等于
所以参数
a
将是d[i-1][j]+1
,b
=d[i][j-1]+1
和c
=d[i-1][j-1] + cost
的值# 2 楼答案
在Java中,逗号永远不是运算符。它永远只是一个分隔符
在这种情况下,它只是分离方法调用中的实际参数表达式。(我已经修复了缩进,以明确这一点。)
因此,在您的示例中,逗号只是分隔了
eval
调用的3个参数表达式。也许你只是被一些“非标准”的压痕误导了(C和C++中,为 acomma operator;
这意味着调用
x
并放弃结果,然后调用y
并将结果分配给a
。但是,该语句不是有效的Java代码。)# 3 楼答案
逗号只是用来分隔方法调用的不同参数,在本例中
eval()
。例如,如果我们这样调用eval()
:然后,在
eval()
的主体内,参数将如下绑定: