Hashtable值未更新

时间:2015-12-05 21:02:12

标签: java hashtable

我几年后基本上忽略了这种语言,并且遇到了一个我无法弄清楚的问题,我正在修补Java。我有一个HashMap<String, Integer>,我用一系列3个字符串初始化。我想在一个更大的字符串中找到这些字符串的所有实例,并将计算的事件存储在Hashtable中。我试图使用以下代码执行此操作:

private void countGenes(){
    int start = 0;
    int end = genome.length - 1;
    for(String key : genes.keySet())
    {
        int value = findGenes(key, start, end);
        genes.put(key, value);
    }
}

private int findGenes(String gene, int start, int end)
{
    if (start + gene.length() > end || !genome.toString().contains(gene))
    {
        return 0;
    }
    else
    {
        return findGenes(gene, gene.indexOf(gene) + 1 , end) + 1;
    }
}

其中genes是已使用一系列字符串(键)初始化的Hashtable,并设置为零计数(值)。当我运行此代码时,调试器显示递归函数findGenes似乎正确计数,但值未更新为genes

我对每个语法的Java 都不熟悉,但我知道其他语言(如C#)对修改正在迭代的项目没有任何反应。但是,我希望抛出异常;相反,这只是不更新​​项目。也许还有一些影子在上面?

2 个答案:

答案 0 :(得分:1)

我认为你的主要问题在于这一行:

return findGenes(gene, gene.indexOf(gene) + 1 , end) + 1;

而不是gene.indexOf(gene),您应该new String(genome).indexOf(gene)

此外,genome的类型是什么?我刚刚注意到你正在调用.length而不是.length(),那么它是char[]吗?在这种情况下,调用genome.toString()时可能会出现其他错误。将char[]转换为String的适当方法是new String(genome)(尽管我不确定为什么您不会将genome存储为String

答案 1 :(得分:0)

你的方法findGenes总是返回0,这就是为什么你不能在Hashtable中看到除0以外的任何东西