2017-09-15 92 views
-4

我要求用户输入两个随机数(即110),那么我也添加了包含性,所以(110)将55如何合计两个随机生成的数字? Java的

public int sum(int num1, int num2) { 

    int counter; //just a variable until I clean this up and get it to work 
    questions++; 

    if (num1 < num2) { 
     int difference = num2-num1;//difference between the given numbers 
     int holder = 0; 
      while (holder <= difference) { 
       holder ++; 
       num1 += num1; 
      } 
     counter = num1; 
    } 
} 

这是代码块我一直在测试。这给了我256当我运行1和10

+2

'的JavaScript = java'删除javascript如果代码是唯一的Java – prasanth

+1

通过添加'num1'对自己来说,你会得到'1,2,4,8,16 ......'的值,每次加倍到256。您需要单独的变量来计算运行总额和每次添加的金额。顺便说一句,我怀疑你想'if(num1 <= num2){'这样'sum(10,10)'将会是'10'。 – skirtle

回答

2
if (num1 < num2) 
    { 
     int answer = num1; 
      while (num1 <= num2) 
      { 
       answer = answer + num1++; 
      } 
     retrun answer; 
    } 
0
public int sum(int num1, int num2) { 
    int result = 0; 
    while(num1<=num2) { 
     System.out.println("num1 is: "+num1); 
     result = result + num1; 
     num1++; 
    } 

    return result; 
} 

请注意循环内的打印行显示,而进度。

1

的Java 8变种:

IntStream.rangeClosed(Math.min(num1, num2), Math.max(num2, num1)).sum() 

作用:

  1. 创建一个包含所有号码从NUM1到NUM2包括性
    • 我们需要确保左侧整数的范围边界总是小于正确的一个,否则范围将是空的。这就是为什么我使用了min()max()
  2. 将所有数字加在一起。

要小心的是: 数字的某些组合产生一个和值,这比Integer.MAX_VALUE较高,这将导致溢出,并可能产生负值的总和。 这可以通过使用略有不同的版本来解释,这是略少高性能:

IntStream.rangeClosed(Math.min(num1, num2), Math.max(num2, num1)) 
    .mapToObj(BigInteger::valueOf) 
    .reduce(BigInteger.ZERO, BigInteger::add); 
0

我猜你这样做是作为编程练习,所以使用循环是任务的关键所在。不过,如果你只是想这给了你,你可以使用等差数列公式正确答案代码:

public int sum(int num1, int num2) { 
    if (num1 <= num2) { 
     return (num2 - num1 + 1) * (num1 + num2)/2; 
    } 

    return 0; 
}