Java 使用方法计算3和5的倍数之和:不正确的和

Java 使用方法计算3和5的倍数之和:不正确的和,java,Java,我一直在尝试用Java中的“方法”解决ProjectEuler问题1。它给出了正确的倍数。然而,总的来说是不对的。这是我的密码: 方法类: package lessons; public class method { int a,b, add; public void multipleThree() { for (a=3; a<1000; a+=3) { System.out.println(a);

我一直在尝试用Java中的“方法”解决ProjectEuler问题1。它给出了正确的倍数。然而,总的来说是不对的。这是我的密码:

方法类:

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);
}
}  

有什么帮助吗?

相应地,
multipleThree()
multipleFive()
的输出是999和995。但是,
a
b
for
循环中又增加一次,以满足退出条件,因此它们的总和是2002,而不是1994

您可以将
sum()
更改为

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

a+b
计算一次-在循环之外。结果将是
a
b
的最终值之和。如果要对每个循环中的每个元素求和,则需要在循环内更新
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);
    }

}
公共类方法{
int add=0;
公共void multipleThree(){
对于(int a=3;a检查下面的

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);
}
 }  
套装课程;
公共类方法{
int a、b、add;
公共void multipleThree()
{

对于(a=3;a分别声明变量

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);
    }
类方法{
int i,j,add;
公共void multipleThree(){
对于(int a=3;a<1000;a=a+3){
系统输出打印项次(a);
i=a;
}
}
public void multipleFive(){
对于(int b=5;b<1000;b=b+5){
系统输出打印ln(b);
j=b;
}
}
公帑{
加法=i+j;
System.out.println(“总和为”+add);
}
}


这是解决给定问题的最佳方法,通过了所有测试用例。快乐编码

你说它没有给出正确的和是什么意思。预期的o/p是多少,你得到了什么?你在哪里为a,b设置了初始值?你得到了正确的倍数,因为a,b在循环中初始化,但在和方法中不是这样。希望你是这样明白我的意思了。你希望从这个程序中得到什么。请先消除冲突。希望你应该学习并尝试
这个
关键字。这可能会对你有所帮助。顺便说一下,你的代码会编译得很好,但你没有初始化gloabal变量
a和b
。因此,
这个
关键字会帮助你。谢谢你
没有谢谢大家,我知道我的错误。P和Q计算3和5乘积R来计算15的乘积,如一个例子,其中30是可被3和5除除的,它是两次,所以我从所得的总和中减去SUM3。这是OP问题的答案,你可以用一种方法减少重复,方法是
long sum(int n,int m){long p=(n-1)/m;return(p*((m*2)+(p-1)*m))/2;}
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);
    }
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);
        }
    }
}