Я новичок в попытках и тестировании того, как это работает. Сейчас я создаю список контактов. Я добавляю «Prashanth» и «Pradep» к trie, и когда я ищу «Pra», я должен получить счет как два. Мой подход имеет переменную размер в каждом узле и возвращает его, когда найденная строка одинаковой длины. Есть некоторые ненужные вещи/переменные, такие как полезная нагрузка и т. Д., Которые я использовал для отладки. Проблема, которую я обнаружил, - это когда я храню символ и узел в hashmap, пустые узлы хранятся. Поэтому я получаю 0 в качестве ответа все время.Java Tries: нужен лучший подход
public class tries {
public static class Node {
HashMap<Character, Node> children = new HashMap<>();
boolean endOfWord = false;
int size =0;
int payload = 10;
public void setNode(char c, Node n) {
children.put(c,n);
}
public Node getNode(char c) {
return children.get(c);
}
public void addNode(String s,int index) {
Node current = children.get(s.charAt(index));
size++;
if(index ==s.length()-1)
{
endOfWord = true;
return;
}
if(current== null)
{
current.payload = 11;
this.setNode(s.charAt(index),current);
}
addNode(s,index+1);
}
public int findcount(String s, int index) {
Node current = children.get(s.charAt(index));
if(index ==s.length()-1)
{
current.endOfWord = true;
return current.size;
}
if(current == null)
{
return 0;
}
return findcount(s,index+1);
}
}
public static void main(String args[])
{
String c1 = "Prashanth";
String c2= "Pradep";
Node n = new Node();
//tries t = new tries();
n.addNode(c1,0);
n.addNode(c2,0);
System.out.println(n.findcount("Pra",0));
}
}
Ошибка, который я получаю Если я запускаю этот код. (Я получу 0, если я изменить немного)
Exception in thread "main" java.lang.NullPointerException
at tries$Node.addNode(tries.java:35)
at tries.main(tries.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Так , вы получаете исключение NullPointerException или нет? Если да, то опубликуйте его трассировку стека; если нет, измените название вашего вопроса. –
Проблема в 'addNode', строка' this.setNode (s.charAt (index), current); 'сначала ток будет * пустым узлом *, и вы устанавливаете это в хэш-символе' children'. –
Вы пытаетесь найти контакт? И нормально ли это делать по-другому? – triForce420