哈希表值不更新
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
.
在很大程度上忽略了该语言几年后,我正在修补 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
.