for循环中的Java倍数

时间:2016-07-19 01:46:21

标签: java for-loop

我编写了以下代码,以获取从0到1000的所有数字,它们是三的倍数:

public class Hi {
  public static void main(String[] args) {
    for(int i = 0; i<1000; i++)
        if(i % 3 == 0)
          System.out.println(i);
  }
}

现在我想将这些数字加在一起并在循环后打印结果。

3 个答案:

答案 0 :(得分:5)

如果迭代3的倍数,则无需测试3的多重性。最后,要添加数字,您应该执行算术运算。像,

long sum = 0;
for (int i = 3; i < 1000; i += 3) {
    sum += i;
}
System.out.println(sum);

或者,在Java 8+中,使用IntStream(对于相同的结果),如

System.out.println(IntStream.rangeClosed(1, 1000 / 3).map(i -> i * 3).sum());

答案 1 :(得分:1)

....因为我们都需要java-8和lambdas oneday ......

final List<Integer> myList = new ArrayList<>(Arrays.asList(new Integer[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 4, 2, 2 }));
final int sum = myList.stream().filter((i) -> i.intValue() % 3 == 0).mapToInt(Integer::intValue).sum();
System.out.println("Sum of divisible by 3 is " + sum);

答案 2 :(得分:-1)

当您浏览1到1000之间的数字时,可以将3的倍数添加到列表中。然后,您可以浏览该列表,并将该列表中的每个数字添加到总和中。

public class Hi {
    public static void main(String[] args) {

        int[] multiples = new int[1000]; // default initialized with zeroes
        mIndex = 0;
        for(int i = 0; i<1000; i++) {
            if(i % 3 == 0) {
                System.out.println(i);
                multiples[mIndex] = i;
                mIndex++;
            }
        }

        int sum2 = 0;
        for(int i2 = 0; i2<mIndex; i2++)
            sum2 += multiples[i2];

        System.out.println(sum2);
    }
}

但这需要两次完成数字,并创建另一个列表。从1到1000,将3的倍数加到总和上会更简单,更有效。

public class Hi {
    public static void main(String[] args) {

        int sum = 0;
        for(int i = 0; i<1000; i++)
            if(i % 3 == 0) sum += i;

        System.out.println(sum);
    }
}

编辑:正如另一张海报所说,有更聪明的方法可以做到这一点。还有用于在O(1)中得到这个总和的数学公式。