这是我的代码
public static int sumOfOddLessThan(int n)
{
int iResult = 0;
for(int i = n - 1; i > 0 && i % 2 != 0; i--)
{
iResult = iResult + i;
}
return iResult;
}
它无法正常工作,我不知道为什么:\
当我输入5时它应该返回4但它返回0
答案 0 :(得分:4)
你在for循环中的条件是:
i is greater than 0 and i is not even
。
当你用5作为参数调用方法时,i的第一个值将是4,这是偶数,因此循环不会被评估。
for(i = n-1; i > 0; i++) {
if(i%2==0) {
iResult += i;
}
}
答案 1 :(得分:2)
你将条件i % 2 != 0
置于for循环中而不是循环内的if
,因此即使它在整个循环中突破也不会满足。
您的代码应如下所示:
public static int sumOfOddLessThan(int n)
{
int iResult = 0;
for(int i = n - 1; i > 0; i--)
{
if(i % 2 != 0) {
iResult = iResult + i;
}
}
return iResult;
}
然后你甚至不需要一个循环,你可以通过获得低于N
的奇数的数量并将其平方来直接评估它。
答案 2 :(得分:2)
你应该修改用于添加系列的论坛,你要做的就是修改它
<强>较早强>
int i = (n+1)/2;
return (i*i)
<强>修饰强>
int i = n/2;
return (i*i);
<强> TEST 强> 输入1: 返回0;
输入2: 返回1;
输入3: 返回1;
输入4: 返回4;
输入5: 返回4;输入6: 返回9;
依旧......
答案 3 :(得分:1)
for循环的第二部分是一个延续条件。在您的情况下,您的续约条件为i > 0 && i % 2 != 0
。
对于n = 5,第一个i是4,而4%2是0.你的连续条件不满足,这就是你的for循环在开始之前退出的原因。
尝试
for(int i = n - 1; i > 0; i--)
{
if (i % 2 != 0)
{
iResult = iResult + i;
}
}
答案 4 :(得分:0)
问题是当for中的条件为false时,循环退出。
因此对于5,i=4
和i % 2 != 0
为false,因此根本不会访问循环。
请改为尝试:
for(i=((n-1)%2==0?n-2:n-1 ; i>0; i=i-2)
{
i > 0 && i % 2 != 0;
}
请注意,通过在每个步骤中从i
减少2,您不必在每个循环上检查奇偶校验。
答案 5 :(得分:0)
首先你将i设置为n-1,所以如果n为5则为4,那么你在for循环上的条件表明我必须是奇数,其中4不是,所以它甚至不做环。试试这个:
public static int sumOfOddLessThan(int n)
{
int iResult = 0;
for(int i = n-1; i > 0; i--)
{
if (i % 2 != 0) iResult += i;
}
return iResult;
}