#java #hash #chained
#Ява #гашиш #прикованный
Вопрос:
Я создал несколько методов, и все они имеют ошибку, называемую
The method add(int, ChainHashEx.Data) is undefined for the type ChainHashlt;Integer,ChainHashEx.Datagt;
и есть еще одна проблема, которая заключается в
The constructor ChainHashlt;Integer,ChainHashEx.Datagt;(int) is undefined
Почему методы не определены? Что-то не так с классом?
Или что-то не так в каком-то месте, о котором я ничего не знаю.
добавление кода и класса с методами под ним.
кодовая цепочка hashex :
package week14; import java.util.Scanner; public class ChainHashEx { static Scanner sc = new Scanner(System.in); static class Data { private int no; private String name; public int keyCode() { return no; } public String toString() { return name; } void scanData(String guide, int sw) { System.out.println(guide "enter data to add"); if (sw == 1) { System.out.print("number : "); no = sc.nextInt(); System.out.print("name : "); name = sc.next(); } else { System.out.print("number : "); no = sc.nextInt(); } } } static void printMenu() { System.out.println("1. add 2. delete 3. search 4. print 5. exit "); } public static void main(String[] args) { int menu; Data data; Data temp = new Data(); ChainHashlt;Integer, Datagt; hash = new ChainHashlt;Integer, Datagt;(13); do { printMenu(); System.out.print("select menu: "); switch(menu = sc.nextInt()) { case 1 : data = new Data(); data.scanData("add", 1); hash.add(data.keyCode(), data); break; case 2 : temp.scanData("delete", 2); hash.remove(temp.keyCode()); break; case 3 : temp.scanData("search", 2); Data t = hash.search(temp.keyCode()); if (t != null) System.out.println("searched : " t); else System.out.println("the data does not exist"); break; case 4 : hash.dump(); break; } } while (menu != 5); System.out.println("stop program"); } }
цепная цепочка класса :
package week14; public class ChainHashlt;K,Vgt; { class Nodelt;K, Vgt; { private K key; private V data; private Nodelt;K, Vgt; next; public Node(K key, V data, Nodelt;K, Vgt; next) { this.key = key; this.data = data; this.next = next; } K getKey() { return key; } V getValue() { return data; } private int size; private Nodelt;K,Vgt;[] table; public void ChainHash(int capacity) { try { table = new Node[capacity]; this.size = capacity; } catch (OutOfMemoryError e) { this.size = 0; } } public int hashValue(Object key) { return key.hashCode() % size; } public V search(K key) { int hash = hashValue(key); Nodelt;K,Vgt; p = table[hash]; while (p != null) { if (p.getKey().equals(key)) return p.getValue(); p = p.next; } return null; } public int add(K key, V data) { int hash = hashValue(key); Nodelt;K,Vgt; p = table[hash]; while (p != null) { if (p.getKey().equals(key)) return 1; p = p.next; } Nodelt;K,Vgt; temp = new Nodelt;K,Vgt;(key, data, table[hash]); table[hash] = temp; return 0; } public void dump() { for (int i=0; ilt;size; i ) { Nodelt;K,Vgt; p = table[i]; System.out.printf("d ", i); while (p != null) { System.out.printf("-gt; %s (%s) ", p.getKey(), p.getValue()); p = p.next; } System.out.println(); } } public int remove(K key) { int hash = hashValue(key); Nodelt;K,Vgt; p = table[hash]; Nodelt;K,Vgt; pp = null; while (p != null) { if (p.getKey().equals(key)) { if (pp == null) table[hash] = p.next; else pp.next = p.next; return 0; } pp = p; p = p.next; } return 1; } } }
Комментарии:
1. Существует только один класс, называемый
ChainHash
. Коды находятся в одних и тех же пакетах, так что с их использованием не должно возникнуть проблем….верно?
Ответ №1:
ваши ChainHash
методы определены внутри Node
класса, поэтому их нельзя найти.
Я думаю, что это ошибка «фигурных скобок» :
- добавить
}
послеV getValue() { return data; }
чтобы «закончить»
Node
урок; - удалите a
}
в нижней частиChainHash
; - удалить
void
изChainHash
конструктора.
после этих исправлений код должен быть скомпилирован.