返回从1到n(包括)的奇数整数之和的方法?

时间:2013-04-29 11:46:08

标签: algorithm

这是我所拥有的,但它不起作用。当我尝试编译时,我收到此错误消息:

  

int result = 0;
  ^^^^^^^^^^^^^^^
  无法访问的代码

我的代码:

public int sumOfOddIntegers (int n) {

    if(n < 1);
    return 0;

    int result = 0;
    for(int i = n - 1; i > 0; i--)
    {
        if(i % 2 != 0) {
            result = result + i;
       }
    }
    return result;
}

5 个答案:

答案 0 :(得分:4)

if(n < 1);
    return 0;

相当于:

if(n < 1) {
}

return 0;

应该替换为:

if(n < 1)
    return 0;

或(正确的方式)

if(n < 1) {
    return 0;
}

答案 1 :(得分:3)

声明:

if(n < 1);

因为分号而无操作。无论比较结果如何,都会对比较进行评估,不做任何事情。

然后,执行下一行,返回0.

答案 2 :(得分:0)

if(n < 1);是你的问题。其余代码无法访问,因为始终执行以下return'。在;之后删除if(n < 1)

答案 3 :(得分:0)

正如其他人所说,if语句中的半冒号是问题所在。但就个人而言,我会这样做:

public int sumOfOddIntegers (int n) 
{
    int result = 0;

    if(n < 1)
        return result;

    for(int i = 1; i <= n; i += 2)
    {
        result += i;
    }
    return result;
}

这样,您可以将迭代次数减半。我们知道每个其他数字都是奇数,所以为什么甚至打扰迭代偶数,并检查它们是否奇怪,当我们知道它们不是?

答案 4 :(得分:0)

序列是算术级数,常见差异为2。 所以它的总和将由公式给出:

sum = n / 2(2a +(n-1)d

其中n = Math.ceil(k);其中k是给定的数字。 并且d = 2,a = 1

public int sumOfOddIntegers (int n) {         

if(n < 1);
return 0;

int totalNumber = Math.ceil(n/2);         

return  (totalNumber/2)*(2 + (totalNumber-1)*2);

`