有没有办法使用for循环自动将整数存储在ArrayList中?

时间:2017-09-01 21:43:02

标签: java arrays for-loop arraylist

我的主要目标是获取一个由数字的位值组成的数组。 例如:如果用户输入是:35779 我想要这个数组:{3,5,7,7,9} (用户输入可能会发生变化,其范围可以从10到int的最大可能值。

(int counter是一个int,表示输入数字的位数值。例如:输入时为:38557:counter = 5)

    ArrayList<Integer> obj = new ArrayList<Integer>();

    for(int i = counter-1; i >= 0 ; --i){
        int ten2pow = (int)Math.pow(10, i);
        int x = input/ten2pow;
        obj.add(x);
        input = input - x*ten2pow;
    }

执行此操作并尝试打印数组时,输出为空数组

编辑:更改for循环初始化和终止条件后,循环工作正常,我能够将Place值存储在ArrayList中

2 个答案:

答案 0 :(得分:0)

我想猜出这个数字,如果需要从控制台读取,那么我就把这个部分留下来了。

假设我们的号码是:35779,那么一个简单的方法来划分&#34;它,逐位数字可能是:

  1. 获取number
  2. 的模块10结果
  3. number除以10
  4. 示例:

    • 模数:9
    • number:3577

    重复:

    • 模数:7
    • number:357

    所以,这可以这样做:

    import java.util.ArrayList;
    import java.util.List;
    
    public class NumbersToArray {
    
        public static void main(String[] args) {
            List<Integer> list = new ArrayList<>();
    
            int number = 35779;
    
            while (number > 0) {
                list.add(0, number % 10);
    
                number /= 10;
            }
    
            System.out.println(list);
        }
    }
    

    打印哪些:

    [3, 5, 7, 7, 9]
    

    所以,没有必要得到number

    的长度

答案 1 :(得分:0)

正如Sotirios Delimanolis在对该问题的评论中暗示的那样,这里的第一个问题是for循环条件是错误的。如果i <= 1以大于i的数字开头,1将永远不会成立。此外,如果该陈述是真的(即i0或小于0),那么增量表达式(i--)将一直运行直到它下溢到Integer.MAX_VALUE

Alnitak在评论中还提到,从最低位数开始会更好。这遵循div/mod algorithm for base conversion,这是更传统的。

用于基本转换的div / mod算法通过递归获取 a b 来工作,其中, a 是最后一个模的结果操作(从源值开始)和 b 是转换为的基础。每次迭代都会从右边开始为结果数提供另一个数字。

例如,将1000转换为基数2:

  • 1000 % 2 = 500, R 0 => ?? ???? ???0
  • 500 % 2 = 250, R 0 => ?? ???? ??00
  • 250 % 2 = 125, R 0 => ?? ???? ?000
  • 125 % 2 = 62, R 1 => ?? ???? 1000
  • 62 % 2 = 31, R 0 => ?? ???0 1000
  • 31 % 2 = 15, R 1 => ?? ??10 1000
  • 15 % 2 = 7, R 1 => ?? ?110 1000
  • 7 % 2 = 3, R 1 => ?? 1110 1000
  • 3 % 2 = 1, R 1 => ?1 1110 1000
  • 1 % 2 = 0, R 1 => 11 1110 1000

您可以看到余数如何用于确定结果值。在这里使用此算法的代码如下所示:

ArrayList<Integer> numberList = new ArrayList<Integer>();

int iteratedValue = input;
do {
    int currentDigit = iteratedValue % 10;
    numberList.add(currentDigit);        
    iteratedValue /= 10;
} while (iteratedValue > 0);

Collections.reverse(numberList);

do...while循环用于确保将第一个数字添加到列表中,即使它是0

可以使用deque或其他集合反向添加项目,作为最后反转列表的替代方案。