
[英]i am trying to use getParameterName().but exception is raising.please tell me the correct way if i am doing in wrong way
[英]I tried to write the program, but it is not working the way I want it. Please tell me what am I doing wrong [closed]
这是一个问题: 修改以上程序,将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);
当您知道界限时,我不太喜欢使用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
:
IntStream
.rangeClosed(7, maximum)
.filter(i -> i % 7 == 0)
.sum();
但这会变慢,因为range
仅允许增量1,因此我们处理每个数字并对每个数字进行取模。
尝试这个:
int number=x;
int sum=0;
while (number<y) {
if (number%7==0) {
sum+=number;
}
number++;
}
但是有更有效的方法。 不需要循环一,而是循环七并求和这些数字:
int d=7;
int number = (x/d)*d;
int sum=0;
while (number < y-d) {
n+=d;
sum+=n;
}
d
表示除数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.