我无法解决这个问题。我需要创建一个显示索引号0-101的应用程序,并存储每个索引号数字的总和。例如:
等等。索引17将存储25,因为17 + 1 + 7 = 25。 我已经得到了索引号列表...
public class ArrayPractice {
public static void main(String[] args)
{
int sum = 0;
int[] arrayNumber = new int[102];
for(int i = 0; i < arrayNumber.length; i++){
arrayNumber[i] = i;
int add = i % 10;
sum += add;
i /= 10;
System.out.println(i);
}
}
}
我也明白,要获得数字的总和,你必须模数10然后除以10,17%10 = 7,17 / 10 = 1 7 + 1 = 8 + 17(指数)= 25。
我一直未能让它在循环中运行。任何帮助将不胜感激。
答案 0 :(得分:1)
也会解释,因为你有3位数字,所以除以10就不够了。你必须这样做,直到它大于0,所以对于100,你得到0,0,1。这就是为什么while循环是最好的,因为你不知道它何时结束。这适用于任何整数。
请记住,当您知道循环何时结束时,将使用for循环。 当你不知道什么时候结束时使用循环,你知道什么时候会发生,但不知道什么时候会发生。
编辑:刚看到你必须添加索引本身,17 = 1 + 7 + 17.修正了。FlowRouter.go()
答案 1 :(得分:0)
您的代码的问题是它只是总结了数字的最后一位数字,它对于数字大于2
的数字不起作用,您必须遍历所有数字并继续添加他们的数字。
for(int i = 0; i < arrayNumber.length; i++) {
arrayNumber[i] = i;
int tmp = arrayNumber[i];
// summing up digits
while(tmp > 0) {
arrayNumber[i] += tmp%10; //extracting right-most digit
tmp /= 10; // removing the right-most digit
}
System.out.println(i , arrayNumber[i]);
}
答案 2 :(得分:0)
我认为你非常接近,但是你很可能想要使用另一个变量(除了你的迭代器i
)来修改 - 否则你的迭代器会不断被搞乱。您还希望继续执行mod / divide操作,直到您的初始数字为0(即您已经处理了所有数字)。您还希望通过for循环重置每次传递的总和。
这是我的示例代码:
int[] arrayNumber = new int[102];
for (int i = 0; i < arrayNumber.length; i++) {
int sum = i;
int startingNumber = i;
while (startingNumber > 0) {
sum += startingNumber%10;
startingNumber /= 10;
}
arrayNumber[i] = sum;
System.out.println(i + " " + sum);
}