将元素数量与ArrayList中的数字匹配

时间:2019-04-25 10:16:48

标签: java

我有两个arraylist,一个是数字,另一个是元素数。

例如:

元素数:[4、3、1]

数字:[31,21,50,70,90,80,50,100]

for(Integer e : elements){

    for(Integer num : numbers){
       for (int i = 0; i < e; i++){
          System.out.print(num + " ");
       }
    }
    System.out.println();

}

我想将4个元素匹配并打印到4个数字,将3个元素打印到下一个3个数字,依此类推。如何根据索引和下一个数字打印数字?

输出:

31 21 50 70

90 80 50

100

4 个答案:

答案 0 :(得分:1)

int count = 0;
ArrayList<Integer> elements = new ArrayList<Integer>() {
    {
        add(4);
        add(3);
        add(1);
    }
};

ArrayList<Integer> numbers = new ArrayList<Integer>() {
    {
        add(31);
        add(21);
        add(50);
        add(70);
        add(90);
        add(80);
        add(50);
        add(100);

    }
};
for (Integer e : elements) {

    for (int i = count; i < count+e; i++) {
        System.out.print(numbers.get(i) + " ");
    }
    count += e;
    System.out.println();

}

答案 1 :(得分:1)

根据列表1中的元素,在第一个列表上循环并在第二个列表上循环。

    ArrayList<Integer> ele = new ArrayList<Integer>();
    ele.add(4);
    ele.add(3);
    ele.add(1);

    ArrayList<Integer> numbers = new ArrayList<Integer>();
    numbers.add(31);
    numbers.add(21);
    numbers.add(50);
    numbers.add(70);
    numbers.add(90);
    numbers.add(80);
    numbers.add(50);
    numbers.add(100);


    int k = 0,i=0,j=0;
    for(i = 0; i < ele.size(); i++){
        for(j = k ; j < k + ele.get(i); j++){
                System.out.print(numbers.get(j)+ " ");
        }
        k = j;
        System.out.print("\n");
    }

答案 2 :(得分:1)

只是为了好玩,让我们使用以下方法为这个小问题提出解决方案:

List<Integer> elements = Arrays.asList(4,3,1);
List<Integer> numbers = Arrays.asList(31,21,50,70,90,80,50,100);

首先,通过简单的检查,确保没有超出范围的索引问题:

if (elements.stream().mapToInt(e -> e).sum() != numbers.size()){
    System.err.println("Invalid input");
    return;
}

现在,我们只需要一个用于数字列表的迭代器:

Iterator<Integer> it = numbers.iterator();

我们照常迭代元素:

for(int n : elements){
    for(int i = 0; i < n; ++i)
        System.out.print(it.next() + " ");
    System.out.println();
}

此解决方案无法在迭代器外部进行访问。

答案 3 :(得分:0)

希望这会达到您的目的

List<Integer> element = new ArrayList<>( Arrays.asList(4, 3, 1));
List<Integer> number = new ArrayList<>( Arrays.asList( 31, 21, 50, 70, 90, 80, 50, 100));
int cnt = 0;
for (Integer integer : element) {
    while (integer > 0) {
        System.out.print(number.get(cnt++));
        integer--;
    }
    System.out.println();
}

如果此答案有用,请投票。