1

私は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];
}
4

3 に答える 3

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]+1bd[i][j-1]+1cd[i-1][j-1] + cost

于 2013-03-16T23:47:46.083 に答える
0

この場合、コンマは、メソッド呼び出しに対するさまざまな引数を区切るためにありますeval()。たとえば、次のeval()ように呼び出す場合:

eval(1, 2, 3)

次に、の本体の内部でeval()、パラメータは次のようにバインドされます。

a = 1
b = 2
c = 3
于 2013-03-16T23:47:42.510 に答える
0

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++ では、コンマ演算子があります。たとえば、

    a = x(), y();

xを呼び出して結果を破棄し、次に呼び出しyて結果を に代入することを意味しますa。ただし、そのステートメントは有効な Java コードではありません。)

于 2013-03-17T00:01:40.670 に答える