我试着编写程序,但它没有按照我想要的方式工作。请告诉我我做错了什么

时间:2016-02-28 20:09:17

标签: java

这是一个问题:修改上述程序,将1到1000之间可被7整除的所有数字相加。 这是我的代码:

int x=1;    
int y=1000;    
int number=x;    
int sum=0;      
while (number%7==0) {    
   sum=sum+number;    
   ++number;    
}    
System.out.printf("The sum of all numbers divisible by 7 from 1 to 100 is %d", sum);

2 个答案:

答案 0 :(得分:1)

当你知道边界时,我真的不喜欢使用while循环的方法。

首先,从找到最高可能性开始:

int maximum = 1000 - 1000 % 7;//994

然后从第一步循环到最后一步,按步骤7进行循环。

for(int x = 7; x <= maximum; x += 7)
    sum += x;

无需使用慢模来检查,因为我们有两个边界并且按​​步长增加7.还要注意<=。如果我们想要包含最高的,那么=就很重要。

如果你愿意,你仍然可以使用while进行操作,但在你的例子中,你循环直到找到一个不能被7整除的数字。你从1开始,所以你永远不会进入。您需要在边界之间循环并使用if验证当前数字是否可被7整除,然后求和。

再次,因为您知道边界,上面显示的for循环看起来更清晰。

为了完整起见,使用Java 8可以在IntStream的帮助下实现这一目的:

IntStream
    .rangeClosed(7, maximum)
    .filter(i -> i % 7 == 0)
    .sum();

但这会慢一些,因为range只允许递增1,所以我们处理每个数字并对每个数字执行模数。

答案 1 :(得分:0)

试试这个:

int number=x;    
int sum=0;      
while (number<y) {    
   if (number%7==0) {
      sum+=number;
   }    
   number++;    
}    

然而,有更有效的方法。没有必要循环一个,但循环7并将这些数字相加:

int d=7;    
int number = (x/d)*d;
int sum=0;
while (number < y-d) {
    n+=d;
    sum+=n;
}

d代表除数。