我有两个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
答案 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();
}
如果此答案有用,请投票。