如何使此代码交替打印countA
然后countB
然后countA
然后countB
依次类推?现在,它先打印所有countA
,然后再打印所有countB
:
System.out.println(name + ":");
System.out.print("[");
for (int a : countA) {
System.out.print(a + "A-");
}
for (int b : countB) {
System.out.print(b + "B, ");
}
System.out.print("]");
答案 0 :(得分:3)
首先,您需要一个循环而不是两个循环。然后,您需要一些对序列进行交织的方法。
最简单的方法是每次迭代仅从两个数组中打印元素:
for (int i = 0; i < countA.length; i++) {
System.out.println(countA[i]);
System.out.println(countB[i]);
}
另一种可能性是使用更大的循环来交错这些值。因此,请使用int
范围,即两个数组的大小之和。
假设您有两个数组,两个数组的大小均为3
。然后从0
到5
取值,如果索引为偶数,则从第一个数组中打印项目;如果索引为奇数,则从第二个数组中打印项目。 strong>。
为了重新计算数组中的位置,您只需要除以2
(整数除法):
0 -> 0 / 2 = 0 in first array
1 -> 1 / 2 = 0 in second array
2 -> 2 / 2 = 1 in first array
3 -> 3 / 2 = 1 in second array
4 -> 4 / 2 = 2 in first array
5 -> 5 / 2 = 2 in second array
完整的代码是:
for (int i = 0; i < countA.length * 2; i++) {
int indexInArray = i / 2;
if (i % 2 == 0) {
// Even, take from first
System.out.println(countA[indexInArray]);
} else {
// Odd, take from second
System.out.println(countB[indexInArray]);
}
}
显然,如果两个数组的长度都不同,则变得更加棘手。在这种情况下,您将只遍历较小数组的两倍范围,然后稍后迭代较大数组的最后一部分,而不会交替进行。
您可以通过使用Iterator
并交换它们来完成相同的操作:
Iterator<Integer> first = Arrays.asList(countA).iterator();
Iterator<Integer> second = Arrays.asList(countB).iterator();
Iterator<Integer> current = first;
Iterator<Integer> next = second;
while (current.hasNext()) {
System.out.println(current.next());
// Swap
Iterator<Integer> tmp = current;
current = next;
next = tmp;
}
使用该方法,针对不同长度的数组进行调整非常容易。您只需要将此添加到末尾即可:
while (next.hasNext()) {
System.out.println(next.next());
}
因为,current
不再具有任何元素,所以上一个循环被中止。由于next
可能还有一些元素,因此我们遍历了其余元素。
Iterator
方法具有很大的优势,它也适用于未实现RandomAccess
(基于快速索引的访问)的类,并且适用于所有Iterable
,不仅适用于数组。 Iterable
是很多类。缺点是它不能与基元一起使用。
答案 1 :(得分:2)
只需使用一个普通的旧循环:
System.out.println(name + ":");
System.out.print("[");
// assuming both arrays have the same length
for (int i = 0; i < countA.length; i++) {
System.out.print(countA[i] + "A-");
System.out.print(countB[i] + "B, ");
}
System.out.print("]");
答案 2 :(得分:1)
如果两个数组的迭代次数相同,则尝试将两个sysout语句放入同一循环中。如下所示:
System.out.println(name + ":");
System.out.print("[");
for (int a : countA) {
System.out.print(a + "A-");
System.out.print(b + "B, ");
}
System.out.print("]");
,如果迭代次数不同,则可以使用嵌套循环。像这样:
int count1=0;
int count2=0;
System.out.println(name + ":");
System.out.print("[");
for (int a : countA) {
System.out.print(a + "A-");
count1++;
if(count1<=count2)
{
for(int b:countB)
{
System.out.print(b + "B, ");
count2++;
}
}
}
System.out.print("]");
这可能会解决您的查询。
答案 3 :(得分:1)
int[] countA = new int[]{1,2,3,4,5,8};
int[] countB = new int[]{6,7,8,9,0};
for (int i = 0; i < Math.max(countA.length,countB.length); i++) {
if(i < countA.length) System.out.println(countA[i]);
if(i < countB.length) System.out.println(countB[i]);
}
输出:
1
6
2
7
3
8
4
9
5
0
8