2016-03-29 14 views
0

私はちょうど2つの数字のgcdを計算するプログラムを書いた。 6と4のための最大公約数が2私のgcdプログラムで間違った値を取得

import javax.swing.*; 

public class Zahlen { 
    public static long gcd(long m, long n){ 
    m = Long.parseLong(JOptionPane.showInputDialog("Enter value for m")); 
    n = Long.parseLong(JOptionPane.showInputDialog("Enter value for n")); 
    long tmp; 
    while (n > 0) { 
     tmp = n; 
     m = n; 
     n = m; 
     n = n%m; 
    } // end of while 
    return m; 
    } 

    public static void main(String[] args){ 
    System.out.print(Zahlen.gcd(6,4)); 
    } 
} 
+1

'M = N;'と 'N = M;' ...これだけの設定 'N = N;' –

+0

また、あなたはすぐにそれらを上書きしようとしている場合は、なぜも、パラメータを使用できますか? –

+0

なぜ簡単なデバッグ質問がアップノートを取得していますか? – redFIVE

答えて

1

あなたのアルゴリズムのコードが間違っているので、私は明らかに間違っている私のプログラムは4の結果を返し6と4の数字でそれをテストしました。フラグメント

m = n; 
n = m; 

は役に立ちません。tmpに割り当てられた値は何もしていません。

残りを取得し、nの値をmに割り当て、残りをnに割り当てます。この目的のためにtmpを使用してください。すでにパラメータを持っている場合

while (n > 0) { 
    tmp = m%n; 
    m = n; 
    n = tmp; 
} 

また、なぜあなたは方法gcdmn値をユーザーに尋ねるのですか? gcdで尋ねたり、パラメータを使用したり、コードをmainに移動して、ユーザの番号をgcdに渡してください。

+0

ループを開始する前に 'n <= m'であることを確認する必要があります。 – schwobaseggl

+0

@schwobaseggl 'n> m'の場合、最初のループは2つの数値を効果的に入れ替えます。 – rgettman

+0

hmm .. 'n> m' =>' n = 0'ループで 'm%n == 0 'を返し、' 0'を返します。ない? – schwobaseggl

-1

あなたはmainメソッドから(再帰を使用せずに)関数の下に呼び出すことができます。これは私のために

public static int gcd(int n, int m){ 
    int gcd=1; 
    int upto=n>m?m:n; 

    for(int i=1;i<=upto;i++){ 
     if(n%i==0 && m%i==0){ 
      gcd=i; 
     } 
    } 
    return gcd; 
} 
+0

この答えで何が間違っていますか? –

-1

動作します。私はintでそれをやったが、それを長くキャストすることは難しくありませんでした。

int m = Integer.parseInt(JOptionPane.showInputDialog("Enter value for m")); 
     int n = Integer.parseInt(JOptionPane.showInputDialog("Enter value for n")); 
     int i =1; 
     int gcd=1; 
     while(m>n?i<=n:i<=m){ 
      if(m%i==0&& n%i==0){ 
       gcd=i; 
      } 
      i++; 
     } 
     System.out.println(gcd);} 
関連する問題