Java三元运算符行为令人困惑

时间:2015-08-11 16:33:26

标签: java

我想到了在java中使用冒号运算符的困惑。在我的代码中,我使用了以下行

int replace=L[i-1][j-1]+P.charAt(i-1)!=T.charAt(j-1)?1:0;

但那并没有给出正确的结果让我感到困惑。然后我用以下

更改了上面的行
L[i-1][j-1]+(P.charAt(i-1)!=T.charAt(j-1)?1:0);

工作得很好。我想知道为什么会这样。我有以下使用C和Java编写的ideone链接。他们正在没有第一个支架。但为什么在我的代码中它没有给出结果。

https://ideone.com/QMYaNy
https://ideone.com/QhBwkt

为了更好地理解,我将在下面提供完整的代码:

public class EditDistance {
    static int [][] L;
    public static void main(String[] args) {
        String P="SUNDAY";
        String T="SATURDAY";
        minedit(P, T);



}


static void minedit(String P,String T)
{
    int m=P.length()+1;
    int n=T.length()+1;
    L=new int[m][n];
    for(int i=0; i<m; i++)
    {
        for(int j=0; j<n; j++)
        {
            L[0][j] = j;
            L[i][0] = i;
        }
    }

    //System.out.println(L[0][0]);
    for(int i=1;i<m;i++)
    {
        for(int j=1;j<n;j++)
        {
            int insert=1+L[i][j-1];
            int delete=1+L[i-1][j];
            //int replace=L[i-1][j-1]+P.charAt(i-1)!=T.charAt(j-1)?1:0;
            int replace=L[i-1][j-1]+(P.charAt(i-1)!=T.charAt(j-1)?1:0);
            L[i][j]=minimum(insert, delete, replace);
        }
    }

     for(int i=0; i<m; i++)
        {
            for(int j=0; j<n; j++)
            {
                System.out.print(L[i][j]+" ");
            }
            System.out.println();
        }

    System.out.println("Minimum Edit Distance is "+L[m-1][n-1]);
}

public static int minimum(int a,int b,int c)
{
    int temp=a<b?a:b;
    return temp<c?temp:c;
}

}

2 个答案:

答案 0 :(得分:2)

在您的第一个示例中,null始终只是1或0,因为

(function($){
    $(function () {
        var pnom = "myurl/"+"@((HttpContext.Current.Request.RequestContext.RouteData.Values["nom"] ?? "").ToString().ToLower())";
        $('ul.menu li.menu-item-simple-parent.menu-item-depth-0 a')
            .removeClass('current_page_item')
            .filter(function (index) {
            return $(this).attr('href').toLowerCase() == pnom;
        })
        .addClass('current_page_item');
    });
})(jQuery);

被评估为布尔表达式。首先计算表达式的这一部分:

replace

然后它会检查是否等于:

L[i-1][j-1]+P.charAt(i-1)!=T.charAt(j-1)

如果不相等,L[i-1][j-1]+P.charAt(i-1) 将为1.如果相等,T.charAt(j-1) 将为0.

包装

replace
括号中的

将首先将其评估为1或0,然后将该结果添加到

replace

答案 1 :(得分:-2)

你必须知道这一行:

int replace=L[i-1][j-1]+P.charAt(i-1)!=T.charAt(j-1)?1:0;

部分:

P.charAt(i-1)!=T.charAt(j-1)?1:0;

它只是一个内联,如果,这是这样的:

if(P.charAt(i-1)!=T.charAt(j-1))
{
     return 1;
}
else
{
     return 0;
}

换句话说,如果P.charAt(i-1)!= T.charAt(j-1)为真:

int replace=L[i-1][j-1] + 1;

如果是假的话:

int replace=L[i-1][j-1] + 0;

我希望这有助于你。

问候。