java - 交替打印两个阵列

原文 标签 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("]");

最佳答案

每次迭代两次打印

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

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

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




整数序列

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

假设您有两个数组,大小均为3。然后采用从05的范围,如果索引为偶数,则从第一个数组打印项目,如果索引为奇数,则从第二个数组打印项目。

为了重新计算数组中的位置,您只需要除以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。缺点是它不能与基元一起使用。

关于java - 交替打印两个阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51683571/

相关文章:

java - Java无法推断“类”的类型参数

javascript - 避免以JavaScript方式重复

javascript - 如何在javascript中合并连续的日期?

java - 为什么System.getenv(“HOMEPATH”)在Windows上不返回绝对路径?

java - 将已经转换的对象返回给具体的类类型

java - 如何在没有hibernate.cfg.xml文件的情况下创建Hibernate session ?

Java3D 绘制空白窗口(不在小程序中)

javascript - 在 JavaScript 中初始化一个二维数组

c - 在C中制作2D字符串数组

c - 将本地静态数组传递给函数