Ошибка перевода кода Java в C # при шифровании Хаффмана

#java #c# #translate #huffman-code

#java #c# #перевести #хаффман-код

Вопрос:

Ну, вы увидите, проблема в том, что я перевожу код C # java, который шифрует текстовый файл методом Хаффмана, на java, где исходная программа работает идеально, но вопрос здесь в том, что мне это нужно на C #.

Я пытаюсь перевести это на C #, но это генерирует 4 ошибки внутри методов setPrefixCodes и buildTree, в которых я ничего не понимаю, и я не знаю, что я перевожу неправильно, или мне нужно реализовать что-то еще.

Мне действительно нужно знать, как это правильно перевести

Помогите!!!!!!

 namespace Huffman_v2 
{
    public partial class Form1: Form 
    {
        public Form1() 
        {
            InitializeComponent();
        }

        String documento;

        private static IDictionary<char, string> charPrefixHashMap = new Dictionary<char, string> ();

        internal static HuffmanNode root;

        private void btnCifrar_Click(object sender, EventArgs e) 
        {
            string txtText = documento;
            IDictionary<char, int> freq = new Dictionary<char, int> ();
            for (int i = 0; i < txtText.Length; i  ) 
            {
                if (!freq.ContainsKey(txtText[i])) 
                {
                    freq[txtText[i]] = 0;
                }

                freq[txtText[i]] = freq[txtText[i]]   1;
            }

            txtFrecuencia.Text = freq.ToString();
            root = buildTree(freq);
            setPrefixCodes(root, new StringBuilder());
            StringBuilder s = new StringBuilder();

            for (int i = 0; i < txtText.Length; i  ) 
            {
                char c = txtText[i];
                s.Append(charPrefixHashMap[c]);
            }
            string xs = decode(s.ToString());
            txtPrefijos.Text = charPrefixHashMap.ToString();
            txtCifrado.Text = xs.ToString();
        }

        private static void setPrefixCodes(HuffmanNode node, StringBuilder prefix)
        {
            if (node != null) 
            {
                if (node.left == null amp;amp; node.right == null)
                {
                    charPrefixHashMap[node.data] = prefix.ToString();
                }
                else 
                {
                    prefix.Append('0');
                    setPrefixCodes(node.left, prefix);
                    prefix.deleteCharAt(prefix.Length - 1); //error en .deleteChatAt
                    prefix.Append('1');
                    setPrefixCodes(node.right, prefix);
                    prefix.deleteCharAt(prefix.Length - 1); //error en .deleteChatAt
                }
            }
        }

        private static string decode(string s)
        {
            StringBuilder stringBuilder = new StringBuilder();
            HuffmanNode temp = root;
            
            for (int i = 0; i < s.Length; i  ) 
            {
                int j = int.Parse(s[i].ToString());
                if (j == 0) 
                {
                    temp = temp.left;
                    if (temp.left == null amp;amp; temp.right == null) 
                    {
                        stringBuilder.Append(temp.data);
                        temp = root;
                    }
                }
                
                if (j == 1) 
                {
                    temp = temp.right;
                    if (temp.left == null amp;amp; temp.right == null) 
                    {
                        stringBuilder.Append(temp.data);
                        temp = root;
                    }
                }
            }
            return stringBuilder.ToString();
        }

        private static HuffmanNode buildTree(IDictionary < char, int > freq) 
        {
            PriorityQueue<HuffmanNode> priorityQueue = new PriorityQueue<HuffmanNode>(); // esta linea tiene el error en PriorityQueue<HuffmanNode> 
            ISet<char> keySet = (ISet<char>) freq.Keys;
            
            foreach(char ? c in keySet) {
                HuffmanNode huffmanNode = new HuffmanNode();
                huffmanNode.data = (char) c;
                huffmanNode.frequency = freq.get(c); //aqui en .get
                huffmanNode.left = null;
                huffmanNode.right = null;
                priorityQueue.offer(huffmanNode);
            }
            
            Debug.Assert(priorityQueue.size() > 0);
            while (priorityQueue.size() > 1) 
            {
                HuffmanNode x = priorityQueue.peek();
                priorityQueue.poll();
                HuffmanNode y = priorityQueue.peek();
                priorityQueue.poll();
                HuffmanNode sum = new HuffmanNode();
                sum.frequency = x.frequency   y.frequency;
                sum.data = '-';
                sum.left = x;
                sum.right = y;
                root = sum;
                priorityQueue.offer(sum);
            }
            return priorityQueue.poll();
        }
    }
}
  

Комментарии:

1. Было бы полезно, если бы вы показывали полученные ошибки и отмечали строки кода, на которые они ссылаются.

2. Почему вы используете stringbuilder вместо того, чтобы просто использовать строку?

3. Вместо ... = freq.get(c); , который, как я предполагаю, является java, вы должны быть в состоянии сказать ... = freq[c]; ,