java - 无法在字符串数组中将字符串分配给 null

标签 java arrays

美好的一天,

我必须创建一个动态数组类,它将表示具有动态大小的字符串数组。我已经创建了 add 方法,但现在使用 removeElement 方法时遇到了一些困难。

这是我的代码:

public class DynamicArray {

public String[] dynamicString = new String[0];

public void addElement(String input) {
    int loc = findFreeSpace();

    if (loc >= 0) {
        dynamicString[loc] = input;
    }
    else {
        dynamicString = Arrays.copyOf(dynamicString, dynamicString.length + 1);
        dynamicString[dynamicString.length - 1] = input;
    }

}

public void removeElement(String input){
    for(String eachElement : dynamicString){
        if(eachElement.equalsIgnoreCase(input)) ; eachElement = null;
    }
}

private int findFreeSpace() {
    for (int i = 0; i < dynamicString.length; i++) {
        if (dynamicString[i] == null) {
            return i;
        }
    }
    return -1;
}

public static void main(String[] args){
    DynamicArray array = new DynamicArray();

    array.addElement("a");
    array.addElement("b");
    array.addElement("c");
    array.addElement("d");

    array.removeElement("a");
    System.out.println(array.dynamicString[0]);
}

在main方法中,4个String元素被添加到数组对象中。之后我使用removeElement 方法从该对象的dynamicString 中删除特定的字符串元素。但是,此方法不起作用,system.out.println 在控制台中打印“a”(而不是 null)。

最佳答案

eachElement 是数组中引用的副本,并且您要为此副本分配一个新值 (null)。因此原始引用文献保持不变。您需要一个传统的循环,它修改 dynamicString[i]:

for (int i = 0; i < dynamicString.length; i++){
    if (dynamicString[i].equalsIgnoreCase(input)) {
        dynamicString[i] = null;
    }
}

关于java - 无法在字符串数组中将字符串分配给 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23041480/

相关文章:

c - 无法从 C 中的数组中打印出值

java - 列表的 Bean 验证大小?

java - 在没有公共(public)父模块的子模块中重用 Maven 属性

java - 为什么java和c++中opencv的HoughLines结果不同

python 列表突变(for in loop vs range(len))

c - 如何在c中的数组中插入新元素

java - Java 应用程序运行时出现“无法分配内存”(errno=12) 错误

java - spring security认证添加子域

arrays - 如何将 `getBounds' 与 STArray 一起使用?

javascript - 代码审查 : Deep filter array of objects concisely in Javascript