2015-12-05 57 views
-1

幾年後我基本上忽略了語言,並且遇到了一個我無法弄清楚的問題,我正在修補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#這樣的其他語言對修改正在迭代的項目沒有反應。但是,我期望拋出一個異常;相反,這只是不更新​​項目。也許有一些陰影在發生?

+1

我認爲Java的邏輯是,你很好,因爲你不修改ps:'Hashtable'已經死了,使用'(Hash)Map' – zapl

回答

1

別的比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)(雖然我不知道你爲什麼會不只是存儲genomeString

+0

因爲您正在迭代的鍵集只改變了值我在其他部分中操作的字符操作數量,將它作爲char數組而不是字符串更有意義,我需要將它作爲完整字符串而不是字符數組來處理。 –

0

你的方法findGenes總是返回0這就是爲什麼你不能看到在哈希表

+0

不,在遞歸部分中,他返回調用該方法的總數和1。 – mapeters