交替打印两个阵列

时间:2018-08-04 07:44:11

标签: java arrays

如何使此代码交替打印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("]");

4 个答案:

答案 0 :(得分:3)

每次迭代打印两张

首先,您需要一个循环而不是两个循环。然后,您需要一些对序列进行交织的方法。

最简单的方法是每次迭代仅从两个数组中打印元素:

for (int i = 0; i < countA.length; i++) {
    System.out.println(countA[i]);
    System.out.println(countB[i]);
}

整数序列

另一种可能性是使用更大的循环来交错这些值。因此,请使用int范围,即两个数组的大小之和。

假设您有两个数组,两个数组的大小均为3。然后从05取值,如果索引为偶数,则从第一个数组中打印项目;如果索引为奇数,则从第二个数组中打印项目。 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