我敢肯定,我正在用Java(這實際上是我的第一個程序)犯了一個新手的錯誤。我試圖將我編寫成java的一些工作python代碼(作爲學習/測試練習來學習一些差異),但是我在兩者之間得到了不同的結果。試圖將python代碼移植到Java,但得到不同的結果
我的程序需要一個數據列表並基於它生成另一個列表(基本上看看一個值是否可以被一個和分解)。 Python正確地給出了2,578個結果,而Java只給出了12個。我試圖在java中找到相同的命令,並認爲我做了,但似乎無法弄清楚爲什麼結果不同(兩者之間的區別我遇到了多線程問題和同步變量,並不確定Java是否在幕後做任何事情,所以我有一個while循環繼續運行,直到結果穩定,但它沒有幫助。任何的意見都將會有幫助。
下面是有問題的代碼(java的在底部註釋作爲參考的頂部,Python和僞代碼):
for (int c = 0; c <= max_value; c++){
String temp_result = (s - c * data.get(i) + "," + i);
if(results.contains(temp_result)){
String result_to_add = (s + "," + i+1);
if(results.contains(result_to_add)){
System.out.println("contains result already");
} else {
results.add(result_to_add);
} print len(T)
#Here's the basic pseudo code(I added a few control variables but here's a high level view):
for i = 1 to k
for z = 0 to sum:
for c = 1 to z/x_i:
if T[z - c * x_i][i - 1] is true:
set T[z][i] to true
*/
當您在代碼中發現錯誤並且出現意想不到的情況時,調試器可能非常有用。它通常是您在IDE中運行的按鈕。 ;) – 2012-02-23 13:01:59
@PeterLawrey謝謝你,我使用eclipse並且看過那個按鈕,但從來沒有真正點擊過它,因爲在python中,一堆打印語句和sys.exit()往往足夠了。我想我需要一個新的Java調試方法,所以我想我必須學習那個按鈕的功能。 – Lostsoul 2012-02-23 13:12:06
在感興趣的行上添加一個斷點,它會顯示所有局部變量。您可以評估表達式,以便您可以看到代碼不同時會得到的結果。這可以讓你嘗試修復。 – 2012-02-23 13:14:38