美好的一天,
我必须创建一个动态数组类,它将表示具有动态大小的字符串数组。我已经创建了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)。
答案 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
。