gpt4 book ai didi

java - 复杂对象丢失数据

转载 作者:行者123 更新时间:2023-12-01 04:26:51 25 4
gpt4 key购买 nike

我知道java中对象的引用是通过副本传递的,但是副本仍然指向系统中的同一内存,因此在另一个函数中更新复杂对象的一些数据后,应该保留原始数据。但有趣的是,这里出了问题。我正在与 Tries 合作。

这是我的 Trie 实现,由于一些自定义规则,它是相当自定义的实现:

public class Trie {
boolean isEnd;
Trie trie[] = new Trie[256];
ArrayList<Integer> indexNode;

public static Trie createTrieNode() {
Trie temp = new Trie();
temp.isEnd = false;
temp.indexNode = new ArrayList<Integer>();
for (int i = 0; i < temp.trie.length; i++) {
temp.trie[i] = null;
}

return temp;
}

public static void insertIntoTrie(Trie root, char[] alpha, int index, int i) {
if (root == null)
root = createTrieNode();
if (i < alpha.length)
insertIntoTrie(root.trie[alpha[i] - 'a'], alpha, index, i + 1);
else {
if (root.isEnd == true) {
root.indexNode.add(index);
} else {
root.isEnd = true;
root.indexNode.add(index);
}
}

}

}

现在我的对象root来自这个类,在调试器中我可以看到这个语句正在执行:root.isEnd = true;

类(class):

 public class AnagramsTogether {
public Trie root = new Trie();
public void printAnagrams(String[] anagrams){
char[] buffer;
for (int i = 0; i < anagrams.length; i++) {
buffer = anagrams[i].toCharArray();
Arrays.sort(buffer);
Trie.insertIntoTrie(root, buffer, i, 0);
}
AnagramsUtil.anagramUtil(root,anagrams);
}
}

但是当root在这里传递时AnagramsUtil.anagramUtil(root,anagrams);

public class AnagramsUtil {

public static void anagramUtil(Trie root, String[] anagrams) {

if (root.isEnd == true) {

for (Iterator<Integer> iterator = root.indexNode.iterator(); iterator
.hasNext();) {
Integer integer = (Integer) iterator.next();
System.out.println(anagrams[integer]);
}
} else {
for (int i = 0; i < root.trie.length; i++) {
if (root.trie[i] == null)
continue;
anagramUtil(root.trie[i], anagrams);
}
}
}

}
public class Anagram{
public static String string[] = {"cat", "dog", "god","act", "tac","gdo"};
public static void main(String args){
new AnagramsTogether().printAnagrams(Anagram.string);
}
}

这条语句if (root.isEnd == true)从未执行过,所以这也从未执行过anagramUtil(root.trie[i], anagrams); 。程序只是继续执行continue 语句。情况不应该是这样,因为我已经看到 root.trie[i] 接收值。为什么会发生这种情况?我对java还很陌生。

最佳答案

您的程序中有许多 Trie 对象,并且您混淆了它们。如果您使用调试器检查对象标识(对象编号),您会发现它们不相同。

关于java - 复杂对象丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18423300/

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