Программа цепного хеширования; метод не определен для ошибки типа

#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 конструктора.

после этих исправлений код должен быть скомпилирован.