无法在字符串数组中将字符串赋值为null

时间:2014-04-13 10:16:31

标签: 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)。

4 个答案:

答案 0 :(得分:2)

eachElement是数组中引用的副本,您将为此副本分配一个新值(null)。所以原始参考文献未经修改。您需要一个传统的循环,它会修改dynamicString[i]

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

答案 1 :(得分:1)

你应该删除“;”在if之后。

另外,如评论中所述,您只修改局部变量。使用for循环而不是foreach循环遍历数组的索引,然后一旦获得要更改的元素的索引,就可以更新数组

答案 2 :(得分:0)

您的代码与此相同:

for(Iterator<String> it = dynamicString.iterator; it.hasNext(); ){
    String eachElement = it.next();
    if(eachElement.equalsIgnoreCase(input)) ;
    eachElement = null;
}

你能明白为什么它不起作用吗?

答案 3 :(得分:0)

多个问题

1&#39 ;;&#39。 if if后表示每次迭代都会执行eachElement = null

2.eachElement = null对数组没有影响它是一个单独的引用,在这种情况下你应该使用旧样式for循环并使用索引访问数组元素。

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

其他最佳选择是使用ArrayList