2013-11-09 260 views
0

幾個月前,我創建了一個計算國際象棋等級的Java應用程序。我只在我的電腦上測試過它,但程序按預期工作。Java JAR文件在不同的操作系統上表現不同

我只是發現,在某些操作系統上,該程序無法正常工作。我在Windows 7中包含了錯誤輸出的圖片,而這正是我在Windows 8上得到的結果。 (該球員的評分應該會下降,因爲他對比較低的評分反對者只得到1.5/5分)。看起來該程序不允許玩家的評分降低。

任何人都可以指出我正確的方向,爲什麼程序在這兩個版本的Windows之間的行爲有所不同?我無法在SO或其他任何地方找到任何解釋。

+0

其他人很難猜測出什麼問題。但找到它的方式是與斷點和/或記錄並行運行程序。 –

+0

也許不同的JRE?嘗試添加System.out.println();在不同的變量上查看差異。 – APerson

回答

0

對於未來的Google員工來說,問題不在於Java;這是我的程序讀取數據的文本文件中的換行符的問題。出於某種原因,在我的文本文件中分隔值的「\ n」字符在Windows 7中沒有顯示,但在Windows 8中運行正常。很奇怪,但很高興它已修復!

2

我認爲最合理的解釋是Windows 7的版本有不同的說法有在現場2:2068,而Windows 8中有2048

+0

這只是一個非常小的差異。它根本不會改變產量。問題在於基於任何輸入(在Windows 7上),玩家的評分變化不會降低, –

0

首先,這裏有一對夫婦的事情,不會是原因。

  • 算術不Java之間的不同的行爲在Windows 7和8。如果您正在使用相同的輸入相同的(單線程)算法,那麼輸出應該是相同的。

  • 算法在32位和64位JVM上沒有變化。

那麼它會是什麼?假設它是相同的JAR,那麼算法可能不會改變。所以這裏有幾個可能性。

  • 這可能是不同投入的結果。如果不考慮算法,我們不能排除它存在的某種可能性,從而使其對輸入非常敏感。

  • 如果代碼中存在競爭條件,則可能發現程序的某些方面在某些Java平臺上無法正常工作......由於CPU速度,內存體系結構和/或線程的差異調度。


這是我們所確切的答案,你可能得到...不看你的代碼。所以我認爲你自己必須去調試

  • 可以訪問某些出現問題的Windows 7計算機。

  • 使用附加的調試器運行應用程序,以查看問題是否在這些條件下重複出現。如果是這樣,那麼以正常方式調試以找出算法不起作用的原因。

  • 如果安裝調試器(和設置斷點)改變程序的行爲方式(即它使問題「走開」),那麼你有證據指向某種形式的競爭狀態。

相關問題