将方法的结果存储在变量中

Storing the result of a method in a variable

在过去的几个月里,我转而使用函数式语言(Racket)进行编程,最近又开始使用 Java 进行编码,所以我对一些概念有点困惑。

以下(简化版)代码是欧几里德算法的一个实现。它工作得很好。我的问题是 return 语句。在 java 中是否可以将方法的结果存储在变量中?例如,在我的代码中,我初始化变量 result 来存储两个数字的 gcd。但是 return 是一个不正确的值。但是,如果我删除变量结果,我会得到 gcd 的正确值,这将我带到第二个问题:return 语句。我不太明白 return 语句在这里做什么。我把它放在第一位的唯一原因是因为我的目标是将方法 Recursion 的结果存储在一个变量中。但就我的尝试而言,似乎只是搞乱了我的代码。

主要objective:将两个数字的gcd结果存储在一个变量中,以便我可以在其他地方重新使用它。

有没有办法让这成为可能? 如有任何建议,我们将不胜感激!

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

正如我的评论所说,您的逻辑是错误的。

而您的说法 if I remove the variable result,I get the correct value for the gcd 完全错误。您得到正确的结果 printed 但不是 returned。这是由于您 return 错误的值造成的。

  1. 从方法签名中删除剩余部分,因为您的第一条语句正在向它分配一些东西
  2. return 正确值:smaller 而不是 remained
  3. return 在 else 分支

这将导致以下代码:

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

缩短结果

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

添加到 TDG's answer,您的代码应该更像这样:

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