gpt4 book ai didi

java - 如何使用循环移动数组中的每个元素?

转载 作者:行者123 更新时间:2023-12-02 05:29:18 24 4
gpt4 key购买 nike

如果有空值,我想将数组中的每个元素向左移动。例如

    public static void main(String[] args) {
String asd[] = new String[5];
asd[0] = "zero";
asd[1] = "one";
asd[2] = null;
asd[3] = "three";
asd[4] = "four;

我希望输出是

  zero, one, three, four.

长度也要调整

如何使用循环来做到这一点?我尝试使用 if 语句来检查元素是否不为空,然后将该值复制到另一个数组。但我不知道如果有空值如何复制。

最佳答案

鉴于这种问题,我想您想要一个简单的、仅循环和仅基于数组的解决方案,以了解它是如何工作的。

您必须迭代数组,保留新插入点的索引。最后,使用相同的索引,您可以“收缩”数组(实际上复制到一个新的较小数组)。

String[] arr = {"a","b",null,"c",null,"d"};

// This will move all elements "up" when nulls are found
int p = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] == null) continue;
arr[p] = arr[i];
p++;
}

// This will copy to a new smaller array
String[] newArr = new String[p];
System.arraycopy(arr,0,newArr,0,p);

刚刚测试了这段代码。

编辑:

关于在不使用 System.arraycopy 的情况下缩小数组的可能性,不幸的是,在 Java 中,数组大小必须在实例化时声明,并且在实例化后不能更改(也不能变大或变小)。

因此,如果你有一个长度为 6 的数组,并找到 2 个空值,如果不创建一个新的空数组然后复制元素,则无法将其长度缩小到 4。

列表可以增长和缩小,并且使用起来更方便。例如,带有列表的相同代码将是:

String[] arr = {"a","b",null,"c",null,"d"};
List<String> list = new ArrayList<>(Arrays.asList(arr));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) if (iter.next() == null) iter.remove();
System.out.println(list);

关于java - 如何使用循环移动数组中的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25701147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com