我想到了在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;
}
}
答案 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;
我希望这有助于你。
问候。