2016-02-22 38 views
0

我一直在試圖解決項目歐拉問題#1使用Java中的「方法」。它正在給出正確的倍數。然而,總和並不正確。這裏是我的代碼:3和5的倍數使用方法的總和:錯誤的總和來

方法類:

package lessons; 

public class method { 
     int a,b, add; 
    public void multipleThree() 
    { 
     for (a=3; a<1000; a+=3) 
     { 
     System.out.println(a); 
     } 
    } 
public void multipleFive(){ 
    for (b=5; b<1000; b+=5) 
     { 
     System.out.println(b); 
}  
} 
public void sum(){ 
    add= a+b; 
    System.out.println("The sum is "+ add); 
} 
} 

主類

package lessons; 

public class Lessons { 

    public static void main(String[] args) { 

     method problem = new method(); 
     problem.multipleThree(); 
     problem.multipleFive(); 
     problem.sum(); 
    }} 

任何幫助???

+0

你是什麼意思,它不給正確的總和。預期的o/p是什麼,你會得到什麼? –

+0

你在哪裏設置a,b的初始值?你得到正確的倍數,因爲a,b是在循環中初始化的,但在求和方法中不是這種情況。希望你明白我的觀點。 –

+0

你期待從這個程序..請刪除衝突第一.. 希望你應該學習和嘗試'this'關鍵字。這可能有助於你.. bydway你的代碼將編譯好,但你沒有初始化gloabal變量'a和b'。所以''this''關鍵字會幫助你輸出 謝謝 –

回答

0

a+b時計算一次 - 外你的循環。結果將是最終值的總和ab。如果要總結每個環路中的每個元素,你需要更新add環路內:

public class method { 
    int add = 0; 

    public void multipleThree() { 
     for (int a=3; a<1000; a+=3) { 
      System.out.println(a); 
      add += a; 
     } 
    } 

    public void multipleFive(){ 
     for (int b=5; b<1000; b+=5) { 
      System.out.println(b); 
      add += b; 
     } 
    } 

    public void sum(){ 
     System.out.println("The sum is "+ add); 
    } 

} 
0

multipleThree()multipleFive()的輸出相應地爲999和995。然而abfor循環遞增一個更多的時間來滿足退出條件爲此它們的和是2002年和1994年不

您可以更改sum()這個

public void sum(){ 
    add = a + b - 8; 
    System.out.println("The sum is "+ add); 
} 
0

檢查以下

package lessons; 

public class method { 
int a,b, add; 
public void multipleThree() 
{ 
for (a=3; a<1000; a+=3) 
{ 
System.out.println(a); 
} 
a=a-3;//added this 
} 
public void multipleFive(){ 
for (b=5; b<1000; b+=5) 
{ 
System.out.println(b); 
}  
b=b-5;//added this 
} 
public void sum(){ 
    add= a+b; 
    System.out.println("The sum is "+ add); 
} 
} 
0

單獨聲明變量,

class method { 
    int i, j, add; 

    public void multipleThree() { 
     for (int a = 3; a < 1000; a = a + 3) { 
      System.out.println(a); 
      i = a; 
     } 
    } 

    public void multipleFive() { 
     for (int b = 5; b < 1000; b = b + 5) { 
      System.out.println(b); 
      j = b; 
     } 
    } 

    public void sum() { 
     add = i + j; 
     System.out.println("The sum is " + add); 
    } 

}

0
import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

    public static void main(String[] args) { 
         Scanner z = new Scanner(System.in); 
     int N = z.nextInt(); 
     while(N!=0) 
      { 
      long number = z.nextInt(); 
      long p = (number-1)/3; 
      long sum1 = (p*(6+((p-1)*3)))/2; 
      long q = (number-1)/5; 
      long sum2 = (q*(10+((q-1)*5)))/2; 
      long r = (number-1)/15; 
      long sum3 = (r*(30+((r-1)*15)))/2; 
      System.out.println(sum1+sum2-sum3); 
     } 
    } 
} 

這是解決給定問題通過所有測試用例的最好方法。快樂編碼

+1

p和q來計算3和5產品r來計算15的乘積作爲考慮例子,其中30可以被3和5整除它會來兩次,所以我從總和中減去sum3。 – SmashCode

+0

不錯......但不*完全* OP的問題的答案。你可以用一個方法'long sum(int n,int m){long p =(n-1)/ m;返回(p *((m * 2)+((p-1)* m)))/ 2; }'。 – shmosel