如何在Java中找到两个给定整数之间的数字之和

如何在Java中找到两个给定整数之间的数字之和,java,numbers,Java,Numbers,我需要写一个方法,计算两个给定整数之间的数字之和 例如,调用sumNums1,3应该返回6,因为1+2+3=6 调用sumNums3,1也应该返回6 到目前为止我有 public static int sumNum(int num1, int num2) { int min = Math.min(num1, num2); int max = Math.max(num1, num2); int sum = 0; for(int i = min; i < max; i+

我需要写一个方法,计算两个给定整数之间的数字之和

例如,调用sumNums1,3应该返回6,因为1+2+3=6

调用sumNums3,1也应该返回6

到目前为止我有

public static int sumNum(int num1, int num2)
{
   int min = Math.min(num1, num2);
   int max = Math.max(num1, num2);
   int sum = 0;
   for(int i = min; i < max; i++)
   {
       sum += i;
   }
        sum =+ max;
   return sum;
}
任何其他方法都会有帮助,但是如果有一种方法可以初始化和并返回它,那么它会有所帮助

诚实地使用java-8 IntStream

使用java-7及以下版本

public static int sumNum(int num1, int num2)
 {
    int min = Math.min(num1, num2);
    int max = Math.max(num1, num2);
    int sum = 0;
    for(int i = min; i <= max; i++)
     {
        sum += i;
      }

    return sum;
}
这是简单的数学:

public static int sumNum(int num1, int num2) {
   int min = Math.min(num1, num2);
   int max = Math.max(num1, num2);
   return max * (max + 1) / 2 - min * (min - 1) / 2
}

或者使用数学在恒定时间内得到:

sum = max * (max + 1) / 2 - (min * (min - 1)) /2;

我不知道您是想学习Java迭代和流,还是想寻找一个解决实际问题的好方法。在后一种情况下,您的问题是算术级数的项之和。 其从m到n开始的项之和由项数(即:m-n+1)与第一项和最后一项之和除以2得出:

(max - min + 1)*(min + max)/2

你可以这样做:

return (num1 + num2) / 2.0 * (Math.abs(num1 - num2) + 1);

与其他人没有太大不同,但这将是我的解决方案

public static int sumNum(int num1, int num2) {
    if (num1 > num2) {
        int temp = num2;
        num2 = num1;
        num1 = temp;
    }
    return (num1 + num2) * (num2 + 1 - num1) / 2;
}

当前方法将遇到性能问题,因为两个整数之间的差距越大。您可以进行一些优化

例如,如果您有奇数个整数:

2 + 3 + 4 + 5 + 6 = 4 + 4 + 4 + 4 + 4

1 + 2 + 3 = 2 + 2 + 2

5 + 6 + 7 = 6 + 6 + 6
2 + 3 + 4 + 5 = 3.5 + 3.5 + 3.5 + 3.5
              = 4 * 3.5

5 + 6 + 7 + 8 + 9 + 10 = 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5
                       = 6 * 7.5
看到模式了吗

2 + 3 + 4 + 5 + 6 = 4 + 4 + 4 + 4 + 4
                  = 5 * 4
                  = (max - min + 1) * ((max + min) / 2)
对于偶数个整数:

2 + 3 + 4 + 5 + 6 = 4 + 4 + 4 + 4 + 4

1 + 2 + 3 = 2 + 2 + 2

5 + 6 + 7 = 6 + 6 + 6
2 + 3 + 4 + 5 = 3.5 + 3.5 + 3.5 + 3.5
              = 4 * 3.5

5 + 6 + 7 + 8 + 9 + 10 = 7.5 + 7.5 + 7.5 + 7.5 + 7.5 + 7.5
                       = 6 * 7.5
看起来很眼熟!让我们看看之前的公式是否有效:

2 + 3 + 4 + 5 = (max - min + 1) * ((max + min) / 2)
              = (5 - 2 + 1) * ((5 + 2) / 2)
              = 4 * 3.5
公式可以简化为:

(max - min + 1) * ((max + min) / 2)  =  (max - min + 1) * (max + min) / 2
因此:

public static int sumNum(int num1, int num2) {
    int min = Math.min(num1, num2);
    int max = Math.max(num1, num2);
    return (max - min + 1) * (max + min) / 2;
}

整数和=0@是的,我忘了把它放进去。是的,我把它放进去了。我没有java-8,我会试试这个。是的,但是当你用3调用时,它会失败,1因为我没有看到你的编辑,你现在可以试试。这种方法效率非常低-你可以计算结果,而不必迭代一组值,这组值的时间越长,范围越大。@Jason你应该添加你的答案来改进现有的答案,并向用户显示有效的方法或max+min*max+1-min/2简单的数学公式再次营救!