无法将Python代码转换为Java

时间:2017-02-25 12:30:24

标签: java python

任何了解Python和Java的人都可以在这里帮助我。

我只是试图将一个简单的程序从我所知道的如何用Python编写成Java,但我显然做了一些简单的错误。

这是python代码:

def correct(a, b, c):
    if a + b == 6 and a**2 + b**2 + c**2 == 18:
        return True
    else:
        return False

def show(a, b, c):
    print("a is", a, "\nb is", b, "\nc is", c)

def test(a=1, b=1, c=1):
    """Find the value of c, where:
    a + b = 6 and a*a + b*b + c*c = 18
    """
    for i in range (-10, 10):
        a = i
        if correct(a, b, c):
            show(a, b, c)
            return
        for j in range(-10, 10):
            b = j
            if correct(a, b, c):
                show(a, b, c)
                return
            for k in range(-10, 10):
                c = k
                if correct(a, b, c):
                    show(a, b, c)
                    return
    print("Nothing worked...")

test()

输出:

a is 3   
b is 3   
c is 0  

这是我对Java版本的尝试:

private class test {

    /* Find the value of c, where:
     * a + b = 6 AND a*a + b*b + c*c = 18
     */

    public static void main(String[] args) {

        int a = 1;
        int b = 1;
        int c = 1;

        for(int i = -10; i == 10; i++) {
            a = i;
            if (correct(a, b, c)) {
                show(a, b, c);
            }
            for (int j = -10; j == 10; j++) {
                b = j;
                if (correct(a, b, c)) {
                    show(a, b, c);
                }
                for (int k = -10; k == 10; k++) {
                    c = k;
                    if (correct(a, b, c)) {
                        show(a, b, c);
                    }
                }
            }
            }       
        System.out.println("Nothing worked...");
        }


    public static void show(int a, int b, int c) {
        System.out.printf("a is: %s\nb is: %s\nc is: %s", a, b, c);
    }

    private static boolean correct(int a, int b, int c) {
        if (a + b == 6 && a*a + b*b + c*c == 18) {
            return true;
            }
        else {
            return false;
        }
    }
}

输出:

"Nothing worked..."

有人可以请我直截了当地说出来吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

看起来你正在取得良好进展。跳出来的一个问题是你在for循环中考虑第二个表达式为"当它是true时停止。"所以你在想:

for (int i = -10; i == 10; i++) {

将保持循环,直到i == 10为真。但实际上,它是循环这是真的。"所以它永远不会循环,因为i-10开始,然后检查条件i == 10,发现是false,循环永远不会运行。

所以我们想要以不同的方式制定这个条件:

for (int i = -10; i < 10; i++) {
// ---------------^^^^^^

现在它在i < 10时运行。当i10时,它会停止,因为i < 10不再为真。

你的其他循环也是如此。