0

我的程序的一部分有问题。在下面的代码中,27 是我们字母表中的字母数;list_extended 是一个 Hashtable(StringBuffer,Integer) 类型的对象,包含文本中所有长度为 n+1 的字符串以及出现次数;list_extended 是正确构建的,因为我已经控制了这部分。目的是:对于外部 for 的每次重复,我们获取生成的文本的最后 n 个字符,并且对于字母表中的每个字母,我们计算通过将字符添加到最后一个字符获得的 n+1 个字符在 list_extended 中出现的次数n 个字符的 text_generated;然后我们选择出现次数最多的字母。我得到的结果是出现次数全部为 0,为什么?编码

        int index;
        int[] occurrences = new int[27];
        StringBuffer curr_word;
        for(int x = 0; x < m; x++){   // m is the number of characters the user wants to add
            curr_word = new StringBuffer(text_generated.substring(x, x+n)); // n is an integer entered previously, initially text_generated is formed by n characters
            for(int j = 0; j < 27; j++){
                if(list_extended.get(curr_word.append(array[j]))==null)
                    occurrences[j] = 0;
                else
                    occurrences[j] =(int) list_extended.get(curr_word.append(array[j]));
            }
            index = 0;
            for(int j = 1; j < 27; j++){
                if(occurrences[j] > occurrences[index])
                    index = j;
            }   
            text_generated = text_generated.append(array[index]);
        }
                    System.out.println("The text generatd is \n" + text_generated.toString());
4

1 回答 1

1

因为你创建了新对象curr_word,但你没有把它放进去list_extended,所以每次你检查

if(list_extended.get(curr_word.append(array[j]))==null)

将是null

occurrences[j]将是0

于 2013-08-21T10:21:01.273 回答