2017-09-15 91 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; 
}