我几年后基本上忽略了这种语言,并且遇到了一个我无法弄清楚的问题,我正在修补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#)对修改正在迭代的项目没有任何反应。但是,我希望抛出异常;相反,这只是不更新项目。也许还有一些影子在上面?
答案 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以外的任何东西