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

Java 将方法的结果存储在变量中,java,return,greatest-common-divisor,Java,Return,Greatest Common Divisor,在过去的几个月里,我改用函数式语言(Racket)编程,最近又重新开始用Java编程,所以我对一些概念有点困惑 以下(简化版)代码是欧几里德算法的实现。它很好用。我的问题是返回语句。在java中是否可以将方法的结果存储在变量中?例如,在我的代码中,我初始化变量result以存储两个数字的gcd。但返回的值不正确。然而,如果我删除变量result,我会得到gcd的正确值,这就引出了我的第二个问题:return语句。我不太明白return语句在这里做什么。我把它放在第一位的唯一原因是,我的目标是将方

在过去的几个月里,我改用函数式语言(Racket)编程,最近又重新开始用Java编程,所以我对一些概念有点困惑

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

主要目标:将两个数字的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;
    }
}

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

您的语句
如果我删除变量结果,那么我得到的gcd的正确值显然是错误的。您得到了正确的打印结果,但未返回。这是由于返回了错误的值

  • 删除方法签名中的剩余部分,因为您的第一条语句正在为其赋值
  • 返回正确的值:
    更小
    而不是
    保留
  • 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);
        }
    }
    
    添加到,您的代码应该更像这样:

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

    您只初始化了变量,但从未设置它们的值(或者您毫无理由地剪切了代码的这一部分)……这是一些基本问题,通过阅读一本基本java书籍可以轻松解决。并从方法签名中删除剩余部分,则没有任何用处。如果你输入6和3,那么你的算法逻辑就是错误的。哎呀,超过10.000:()()))