创建一个显示0-101的Array循环,并将其数字的总和分别存储到该索引中

时间:2017-04-28 21:41:10

标签: java arrays loops sum

我无法解决这个问题。我需要创建一个显示索引号0-101的应用程序,并存储每个索引号数字的总和。例如:

  1. INDEX --------- GENERATED NUMBER
  2. 0 0 --------------------
  3. 1 -------------------- 2
  4. 2 -------------------- 4
  5. 3 -------------------- 6
  6. 等等。索引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。

    我一直未能让它在循环中运行。任何帮助将不胜感激。

3 个答案:

答案 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);
    }