2017-02-25 139 views
-5

任何知道Python和Java的人都可以在这里帮助我。无法将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

请将此表述为[mcve]。解释代码应该做什么。解释你期望它做什么。解释你正在编写的代码是如何失败的。你最终要求社区为你解决这个问题,这是一个不公平的问题。 – idjaw

+2

你觉得'for(int i = -10; i == 10; i ++)'循环会运行多久? –

+0

您只需在最内层的循环内进行检查,该检查已涵盖所有组合。你可以使用'i','j'和'k',而不需要'a','b'和'c'。 –

回答

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不再成立。

这也适用于您的其他循环。

+0

非常感谢!这正是我需要的。非常感激。学习继续。 –