2015-12-26 4 views
-3

Depuis quelques mois, j'ai basculé vers la programmation dans un langage fonctionnel (Racket), et j'ai récemment redémarré le codage en Java, donc je suis un peu confus sur quelques concepts.Stockage du résultat d'une méthode dans une variable

Le code suivant (version simplifiée) est une implémentation de l'algorithme d'euclid. Cela fonctionne très bien. Mon problème avec c'est la déclaration de retour. Est-il possible en Java de stocker les résultats d'une méthode dans une variable? Par exemple, dans mon code, j'ai initialisé le résultat de la variable pour stocker le gcd de deux nombres. Mais cela renvoie une valeur incorrecte. Cependant, si je supprime le résultat de la variable, j'obtiens la valeur correcte pour le gcd, ce qui m'amène à ma deuxième question: les déclarations de retour. Je ne comprends pas très bien ce que la déclaration de retour est en train de faire ici. La seule raison pour laquelle je l'ai en 1ère place était parce que je visais à stocker le résultat de la méthode Recursion dans une variable. Mais pour autant que je l'ai essayé, et semble ne faire que gâcher mon code.

Objectif principal: stocker le résultat de la commande gcd de deux nombres dans une variable, afin de pouvoir la réutiliser ailleurs.

Y a-t-il un moyen de rendre cela possible? Toutes les suggestions seraient appréciées!

import java.util.*; 

public class StoringResults 
{ 
    public static void main(String[]args) 
    { 
     int big,small,remainder,gcd; //Variables declared. 
     Scanner sc=new Scanner(System.in); 

/* Use enters input */ 
     //Big is the larger number. 

     //Small is the smaller of the two. 

     remainder=big%small; 

     int result=recursion(big,small,remainder); 
     System.out.println("FINAL RESULT:"+result); 
    } 

    //recursive method. 
    public static int recursion(int big,int small,int remainder) 
    { 
     remainder=big%small; 
     if(remainder==0) 
     { 
      System.out.println(small); 
     } 
     else 
     { 
      int dummyvar=remainder; 
      big=small; 
      small=dummyvar; 
      recursion(big,small,remainder); 
     } 
     return remainder; 
    } 
} 
+0

Vous initialisées les variables, mais jamais définir leurs valeurs (ou vous couper cette partie du code pour une bonne raison) ... – XenoRo

+0

Voilà quelques questions de base qui sont facilement résolues en lisant un livre java basique. Et enlever le reste de la signature de la méthode, il n'a pas d'utilité. Et votre logique d'algorithme est simplement défectueuse si vous mettez en 6 et 3 par exemple. – luk2302

Répondre

1

Comme mon commentaire déjà indiqué votre logique est défectueuse.

Et votre déclaration if I remove the variable result,I get the correct value for the gcd est tout simplement erronée. Vous obtenez le résultat correct imprimé mais pas retourné. Et cela est causé par le fait que vous renvoyez la mauvaise valeur.

  1. retirer le reste de la signature de la méthode depuis votre première déclaration est d'attribuer quelque chose à ce
  2. retour la valeur correcte: smaller au lieu de remained
  3. retour dans la branche else

qui donner le code suivant:

public static int recursion(int big,int small) 
{ 
    int remainder=big%small; 
    if(remainder==0) 
    { 
     System.out.println(small); 
    } 
    else 
    { 
     big=small; 
     small=remainder; 
     return recursion(big,small); 
    } 
    return small; 
}  

résultats shortening dans

public static int recursion(int big, int small) { 
    int remainder = big % small; 
    if(remainder == 0) { 
     return small; 
    } else { 
     return recursion(small,remainder); 
    } 
} 
+0

yaaaaay, plus de 10.000 :))))) – luk2302

0

Ajouter à TDG's answer, votre code devrait être plus comme ceci:

//recursive method. 
public static int recursion(int big, int small, int remainder) { 
    remainder = big%small 
    if (remainder==0) { 
    System.out.println(small); 
    return small; 
    } else { 
    Int dummyvar = remainder; 
    big = small; 
    small = dummyvar; 
    return recursion(big, small, remainder); 
    } 
}