gpt4 book ai didi

java - 如何将数组中某个变量的每个实例设置为 null 并将每个变量向左移动

转载 作者:行者123 更新时间:2023-12-02 13:48:33 26 4
gpt4 key购买 nike

我正在尝试创建一种方法,将数组中变量 elt 的每个实例设置为 null,然后将其后面的每个变量向左移动。我编写的当前代码仅将变量的第一个实例设置为 null 并将所有其他变量向左移动,但不会将 elt 的任何其他实例设置为 null。到目前为止我的代码如下。

public T remove(T elt) {
boolean exist = false;

for (int i=0; i<data.length; i++) {

if (data[i] == elt) {
data[i] = null;
size--;
exist = true;

for (++i; i < data.length; i++) {
data[i-1] = data[i];
}
}
}

if (exist == true)
return elt;
else
return null;
}

在主要部分,我有以下代码:

public static void main(String[] args) {
Bag<String> sbag = new Bag<String>();

sbag.add("Noriko");
sbag.add("hello");
sbag.add("Buddy");
sbag.add("Mary");
sbag.add("Peter");
sbag.add("hello");

sbag.remove("hello");

当我打印数组时,我期望得到以下输出:

纪子伙伴玛丽彼得

相反,我得到:

纪子伙伴玛丽彼得你好

这告诉我它只是将 elt 的第一个实例设置为 null,将每个变量向左移动,然后停止。谁能告诉我如何修复我的代码,以便将变量 elt 的每个实例设置为 null?

最佳答案

解决“全部删除并转移”问题的常用技术是在一个循环中使用两个单独的索引来完成这一切 - 一个用于读取,一个用于写入:

int rd = 0, wr = 0;
while (rd != data.length) {
if (data[rd] != elt) { // Shouldn't you use equals() instead?
data[wr++] = data[rd++];
} else {
rd++;
}
}
while (wr != data.length) {
data[wr++] = null;
}

这个技术在实践中非常有用。我强烈建议您用纸和铅笔完成一两个示例,以确保您完全理解它。

关于java - 如何将数组中某个变量的每个实例设置为 null 并将每个变量向左移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33241316/

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