2017-02-25 3 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

あなたが進歩しているようです。ジャンプアウトの1つの問題は、forループの2番目の式を「これがtrueのときに停止する」と考えていることです。だから、考えている:i == 10が真になるまで

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

がループし続けます。しかし、実際には、これは "のループを維持し、はこれに当てはまります。" i-10で始まり、次にi == 10という条件がチェックされ、falseであることが判明し、ループは決して実行されないので、ループしません。

だから我々は異なり、その条件を策定したい:しばらくi < 10

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

は、今では動作します。 i10の場合は、i < 10がtrueではないため停止します。

これはあなたの他のループにも当てはまります。

+0

ありがとう!これはまさに私が必要としていたものです。とても有難い。学習は続けられます。 –

関連する問題