In den letzten Monaten habe ich auf die Programmierung in einer funktionalen Sprache (Racket) umgestellt und kürzlich die Codierung in Java neu gestartet, sodass ich in Bezug auf einige Konzepte etwas verwirrt bin.

Der folgende Code (vereinfachte Version) ist eine Implementierung des euclid-Algorithmus. Es funktioniert gut. Mein Problem dabei ist die return-Anweisung. Ist es in Java möglich, die Ergebnisse einer Methode in einer Variablen zu speichern? In meinem Code habe ich beispielsweise das variable Ergebnis initialisiert, um die gcd von zwei Zahlen zu speichern. Dies gibt jedoch einen falschen Wert zurück. Wenn ich jedoch das variable Ergebnis entferne, erhalte ich den richtigen Wert für die gcd, was mich zu meiner zweiten Frage bringt: return-Anweisungen. Ich verstehe nicht ganz, was die return-Anweisung hier tut. Der einzige Grund, warum ich es an erster Stelle habe, war, dass ich das Ergebnis der Methode Rekursion in einer Variablen speichern wollte. Aber soweit ich es versucht habe, scheint es nur meinen Code durcheinander zu bringen.

Primäres Ziel: Das Ergebnis der GCD von zwei Zahlen in einer Variablen zu speichern, damit ich es an anderer Stelle wiederverwenden kann.

Gibt es eine Möglichkeit, dies zu ermöglichen? Anregungen wäre dankbar!

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;
    }
}
-3
12dec1990 26 Dez. 2015 im 15:52

2 Antworten

Beste Antwort

Wie mein Kommentar bereits sagte, ist Ihre Logik fehlerhaft.

Und Ihre Aussage if I remove the variable result,I get the correct value for the gcd ist einfach falsch. Sie erhalten das richtige Ergebnis , aber nicht zurückgegeben. Und das liegt daran, dass Sie den falschen Wert zurückgeben.

  1. Entfernen Sie den Rest aus der Methodensignatur, da Ihre erste Anweisung ihr etwas zuweist
  2. Geben Sie den richtigen Wert zurück: smaller anstelle von remained
  3. Rückkehr in den Zweig else

Daraus ergibt sich folgender Code:

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;
}    

Verkürzung führt zu

public static int recursion(int big, int small) {
    int remainder = big % small;
    if(remainder == 0) {
        return small;
    } else {
        return recursion(small,remainder);
    }
}
1
luk2302 26 Dez. 2015 im 13:21

Wenn Sie die Antwort von TDG hinzufügen, sollte Ihr Code folgendermaßen aussehen:

//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);
  }
}
0
Community 23 Mai 2017 im 12:00