如何将以下C ++语句转换为Java?

时间:2015-11-11 18:46:45

标签: java c++

我有以下代码段,其中' b'是一个整数数组,MAX是一个整数和一个整数' ans'存储结果。我正在调试一些代码,因为我使用Java,所以对C ++不是很熟悉。 C ++代码是:

for(i=0; i<MAX; i++)
    ans+=(b[i]!=-1);  

我理解它的方式是:

for(int i=0;i<MAX;i++)
    if(b[i]!=-1)
        ans+=b[i]; 

但是,我对上面的逻辑得到了一个荒谬的答案。该陈述的真正含义是什么?

4 个答案:

答案 0 :(得分:8)

我认为Java等价物是

for(int i=0;i<MAX;i++)
   if(b[i]!=-1)
      ans++;

在C ++中,true语句的计算结果为1。 Java不这样做,因此您必须明确增加ans

另外,请注意,如果MAX是数组的长度(我不知道它是否存在),您可以为每个循环使用a。

for (int a : b)
    if (a != -1)
        ans++;

答案 1 :(得分:1)

for(i=0; i<MAX; i++)
    ans+=(b[i]!=-1);  

C / C ++将此(b[i]!=-1)计算为0或1.在java中,求值为布尔值(true或false),Java不会自动将布尔值转换为整数。但是你自己很容易做到。

e.g。

for(i=0; i<MAX; i++)
    ans+=(b[i]!=-1) ? 1 : 0;  

应该工作得很好。

答案 2 :(得分:0)

您的代码块在C ++中非常奇怪。我认为回答你问题的最清楚的方法就是告诉你它究竟是什么意思。

for(i=0; i<MAX; i++)    // Normal loop. Nothing strange here
    ans+=(b[i]!=-1);    // Let's look at this more closely

内部陈述是ans += VALUE_OF_AN_EXPRESSION。您在ans中添加了什么表达式的值?这个表达式:b[i]!=-1。那里的运营商是什么?它的!=是一个布尔运算符,所以它返回true / false。在C ++中,true被视为1,false被视为0,但这实际上并不相关,因为即使在Java中,将布尔值添加到整数也没有意义。

希望这更清楚。

答案 3 :(得分:0)

围绕某事的括号意味着它将返回一个布尔值:true或false。但是,Java将这些存储在布尔值中。 C ++将它们存储为0或1值例如,(1 = 1)或(character.x&lt; = object.y)。因此,只要语句返回true,或者B索引i的值不为-1,那么它将继续添加1或true。如果为false,则会添加0或false。要在java中执行此操作,只需添加条件语句,检查b index i是否不等于-1:

有()...     if(b [i]!= -1)... answer = answer + 1,或者回答+ = 1,或者回答++;