在接受挑战的同时,我在网上发现程序员要找到1000和1000之下的所有倍数的总和,我遇到了一个问题。这是我的代码:
public class Challenge {
public static int i = 0;
public static int counter = 0;
public static int sum = 0;
public static int[] multiples3;
public static int[] multiples5;
public static void main(String args[]) throws Exception {
multiples3 = new int[1000];
multiples5 = new int[1000];
while(counter < 1000) {
multiples3[counter] = 3*counter;
multiples5[counter] = 5*counter;
System.out.println("Adding: " + sum + ", " + multiples5[counter] + ", and " + multiples3[counter]);
sum = sum + (multiples5[counter] + multiples3[counter]);
counter++;
System.out.println("Progressive Sum: " + sum + "\n" + "____________");
if(multiples5[counter] >= 1000) {
System.out.println("++++ FIVES DONE ++++");
while(multiples3[counter] <= 999) {
sum = (sum + multiples3[counter]);
counter++;
System.out.println("Progressive Sum: " + sum + "\n" + "____________");
if(multiples3[counter] >= 999) {
System.out.println("~~~~~~ DONE ~~~~\n Final result: " + sum);
}
}
}
}
}
}
我在这一行收到错误:if(multiples5[counter] >= 1000) {
我假设它与我尝试使用数组有关,但我不完全确定,因为我是数组的新手。另外,我是否正确地以正确的方式应对这一挑战?感谢您的帮助!
答案 0 :(得分:3)
您遇到的错误是ArrayOutOfBoundsException
。看counter
:
while(counter < 1000) { counter is 999
// your code here
counter++; counter + 1 => 1000
// your code here
if(multiples5[counter] >= 1000) { multiples5 doesn't have 1000th index.
答案 1 :(得分:1)
问题是你在谈论的那一行有一个ArrayIndexOutOfBoundsException
。
我的电脑上有完整的例外
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1000
at Challenge.main(Challenge.java:25)
第25行:
if(multiples5[counter] >= 1000) {
这告诉您,您尝试索引点1000.但是对于multiples5
,1000不是有效索引,因为其长度为1000.有效索引范围仅为0到999.
计数器命中1000的原因是,在while循环的最后一次迭代中,计数器从999开始,然后你将它增加到1000.然后从那一点开始每次尝试索引数组时都会得到一个IndexOutOfBoundsException。
while(counter < 1000) {
...
counter++;
...
if(multiples5[counter] >= 1000) {
答案 2 :(得分:0)
如果3或5的倍数是样本的总和全部3 +所有5的总和 - 3 * 5的总和(否则它们将被计数两次。要计算倍数的总和,您可以使用公式{ {1}}其中m * n * (n + 1) / 2
是倍数,m
是这些元素的数量。
即。总和是
n
BTW它是3或5的倍数的值的总和,而不是3的前1000个倍数的总和加上前5个倍数的总和5.这也将两个数字相加。
所以你不需要循环或数组。注意:许多这类拼图都是非常数学化的编程难题。