我试图添加一个连续奇数平方的总和来加起来相同的数字。例如:加在一起的前4个连续奇数平方数将等于84,(1 * 1)+(3 * 3)+(5 * 5)+(7 * 7)= 84.附加是我的代码。结果2,非循环代码是正确的。我需要帮助解决我在使用result1的循环代码时出错的问题。
Inputnumber等于请求的奇数平方数。
public static int sumWithLoop (int inputNumber)
{
int result1 = 0;
int counter = 1;
while (counter <= inputNumber)
{
result1 = result1*result1 + counter;
counter = counter + 2;
}
return result1;
}
public static int sumWithoutLoop (int inputNumber)
{
int result2 = (inputNumber*(2 * inputNumber - 1) * (2 * inputNumber + 1) / 3);
return result2;
}
答案 0 :(得分:1)
您可能需要result1 = result1 + counter * counter;
而不是result1 = result1*result1 + counter;
。
答案 1 :(得分:0)
您的大多数问题都在while
循环内的数学中。
result1
应初始化为1.(至少我正在这样做。)您在广告块result1
中的第一行并向其添加counter
。你需要的是更像这样的东西:
result1 = result1 + (int) (Math.pow(1 + 2 * counter, 2));
这需要result1
并为其添加下一个奇数平方。 (1 + 2 * counter
=下一个奇数)
counter
应该在while
循环结束时增加 1 ,而不是2(因为我乘以counter
函数中的Math.pow
乘以2。我的最终代码如下:
public static int sumWithLoop (int inputNumber)
{
int result1 = 1;
int counter = 1;
while (counter < inputNumber)
{
result1 = result1 + (int) (Math.pow(1 + 2 * counter, 2));
counter = counter + 1;
}
return result1;
}
当inputNumber
为4时返回84,当它为5时返回165,当它为6时返回286等等,所以它看起来像是有效的。
希望这有帮助!
P.S。仅供参考,我/你可以在while循环的第一行使用result1 += (int) (Math.pow(1 + 2 * counter, 2));
。区别在于 + = 运算符,它将以下值添加到前面的变量中。它比this = this + somethingMore;
此外,在第二行中,我们可以使用counter++;
,而不是counter = counter + 1;
++ 在其使用的变量上添加一个。