2015-11-17 3 views
-1

Я создаю программу для создания дерева Хаффмана. Когда я добираюсь до строки 31 (node ​​[i] = setFreq (freq);), мой компилятор возвращает ошибку «не может найти символ», символ «метод setFreq (int)», а местоположение «class Huffman». Насколько я могу судить, узел [i] правильно инициализируется как NodeType, но не возвращается к классу упомянутой строки. Ниже приведен раздел моего кода, который должен быть всем, что необходимо (извинения, если это не так). Входная таблица будет линейной после строки буквенной частоты, то есть: A-3 B-32 C-23 и т. Д. Благодарим за любую помощь заранее.Невозможно найти символ между классами

import java.io.*; 
import java.util.*; 
public class Huffman{ 
    final static int MAXBITS = 138; 
    final static int MAXSYMBS = 138; 
    final static int MAXNODES = 255; 

    public static void Huffman(){ 
     CodeType cd = new CodeType(); 
     CodeType code[] = new CodeType[MAXSYMBS]; 
     NodeType node[] = new NodeType[MAXNODES]; 
     int i, k, p, o, q, root, freq; 
     DynamicList rootNodes = new DynamicList(); 
     char symb; 
     char alph[] = new char[MAXSYMBS]; 

     for (i=0; i<MAXSYMBS; i++){ 
      alph[i] = ' '; 
     } 

     try (BufferedReader br = new BufferedReader(new FileReader("HuffmanTable.txt"))){ 
      String line; 
      i=0; 
      while ((line = br.readLine()) != null){ 
       String[] parts = line.split("-"); 
       node[i] = new NodeType(); 
       String trick = parts[0]; 
       symb = trick.charAt(0); 
       freq = Integer.parseInt(parts[1]); 
       node[i] = setFreq(freq); 
       rootNodes.pqInsert(new SmallNode(i, freq)); 
       alph[i] = symb; 
       i++; 
     } 
    } 
} 

А класс NodeType

public class NodeType{ 
    private int freq; 
    private int father; 
    private boolean isLeft; 

    public NodeType(){} 

    public void isLeft(boolean fact){ 
     isLeft = fact; 
    } 
    public boolean isLeft(){ 
     return isLeft; 
    } 
    public void setFreq(int fr){ 
     freq = fr; 
    } 
    public int getFreq(){ 
     return freq; 
    } 
    public void setFather(int fath){ 
     father = fath; 
    } 
    public int getFather(){ 
     return father; 
    } 
} 

ответ

1

Ваш setFreq(int) метод экземпляра класса NodeType. Кроме того, он не возвращает объект NodeType, поэтому вы не можете назначить его так, как node[i].

Что вам нужно сделать, это создать объект NodeType, инициализировать его необходимыми значениями и затем поместить в массив.

NodeType node = new NodeType(); 
node.setFreq(freq); 
node[i] = node; 
Смежные вопросы