我正在開發Java 7中的桌面應用程序。我在這裏有一種情況。在低於從字段變量讀取值
private synchronized void decryptMessage
(CopyOnWriteArrayList<Integer> possibleKeys, ArrayList<Integer> cipherDigits)
{
// apply opposite shift algorithm:
ArrayList<Integer> textDigits = shiftCipher(possibleKeys, cipherDigits);
// count CHI squared statistics:
double chi = countCHIstatistics(textDigits);
if(chi < edgeCHI) // if the value of IOC is greater or equal than that
{
System.err.println(chi + " " + possibleKeys + " +");
key = possibleKeys; // store most suitable key
edgeCHI = chi;
}
}
的方法我指望所謂的「志」和根據,如果「智」小於'edgeCHI的價值我保存在實例變量鍵的值。該方法由一些線程調用,所以我強制執行同步。
當所有線程完成程序繼續執行時,通過將控制傳遞給控制操作順序的方法。然後這條生產線在該方法被執行:
System.err.println(edgeCHI+" "+key+" -");
它打印「智」的正確的值,如已在decryptMessage
方法被打印「智」的最後一個值,但密鑰的值是不同的。 'decryptMessage'方法由生成鍵值的線程調用。
我將關鍵值存儲爲全局變量 private volatile CopyOnWriteArrayList<Integer> key = null; // stores the most suitable key for decryption
。 爲什麼我有兩個不同的鍵值?價值本身並不重要。問題是在上次調用'decryptMessage'方法時(當chi < edgeCHI)必須匹配在控制操作流程的方法上打印的鍵值。 這是你如何創建線程:
for(int y = 0; y < mostOccuringL.length; y++){// iterate through the five most frequent letters
for(int i = (y + 1); i < mostOccuringL.length; i++){//perform letter combinations
int [] combinations = new int[2];
combinations[0] = y;
combinations [1] = i;
new KeyMembers(""+y+":"+i ,combinations, keywords, intKeyIndex, cipherDigits).t.join();
}
}
在run方法調用decryptMesssage方法,以確定最可行的解密密鑰。 我一直在試圖弄清楚兩天的可能性是什麼,但我不明白。 建議?
你期望的結果是什麼?你得到了什麼?我們不知道你在談論什麼兩個不同的關鍵值。 –