有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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];
}

共 (3) 个答案

  1. # 1 楼答案

    方法中的逗号用于分隔参数

    如您所见eval方法需要树参数

    private static int eval (int a, int b, int c){
    

    在你的代码示例中,你是这样调用它的

            d[i][j] = eval(d[i - 1][j] + 1, //<-there is comma here in your code
            d[i][j - 1] + 1, d[i - 1][j - 1] + cost);
    

    这等于

    d[i][j] = eval(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1] + cost);
    

    所以参数a将是d[i-1][j]+1b=d[i][j-1]+1c=d[i-1][j-1] + cost的值

  2. # 2 楼答案

    在Java中,逗号永远不是运算符。它永远只是一个分隔符

        d[i][j] = eval(d[i - 1][j] + 1,
                       d[i][j - 1] + 1, 
                       d[i - 1][j - 1] + cost);
    

    在这种情况下,它只是分离方法调用中的实际参数表达式。(我已经修复了缩进,以明确这一点。)

    因此,在您的示例中,逗号只是分隔了eval调用的3个参数表达式。也许你只是被一些“非标准”的压痕误导了


    (C和C++中, acomma operator

        a = x(), y();
    

    这意味着调用x并放弃结果,然后调用y并将结果分配给a。但是,该语句不是有效的Java代码。)

  3. # 3 楼答案

    逗号只是用来分隔方法调用的不同参数,在本例中eval()。例如,如果我们这样调用eval()

    eval(1, 2, 3)
    

    然后,在eval()的主体内,参数将如下绑定:

    a = 1
    b = 2
    c = 3