我敢肯定,我正在用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