我有以下代码段,其中' 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];
但是,我对上面的逻辑得到了一个荒谬的答案。该陈述的真正含义是什么?
答案 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,或者回答++;