哈希表值不更新

Hashtable values not updating

在很大程度上忽略了该语言几年后,我正在修补 Java,并且遇到了一个我无法弄清楚的问题。我有一个 HashMap<String, Integer> ,我用一系列 3 个字符串进行初始化。我想在一个更大的字符串中找到这些字符串的所有实例,并将计算出的次数存储在哈希表中。我正在尝试使用以下代码这样做:

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 是已经使用一系列字符串(键)初始化并设置为零计数(值)的哈希表。当我 运行 这段代码时,调试器显示递归函数 findGenes 似乎计数正确,但值没有更新到 genes.

我不熟悉 Java 的 for each 语法,但我知道其他语言,如 C#,不会对修改正在迭代的项目。但是,我希望抛出异常;相反,这只是不更新​​项目。也许正在发生一些阴影?

你的方法 findGenes 总是 returns 0 这就是为什么你在哈希表中看不到除 0 以外的任何东西

我认为您的主要问题在于此行:

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 .