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

时间:2015-12-26 12:52:39

标签: java return greatest-common-divisor

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

以下(简化版)代码是euclid算法的实现。它工作得很好。我的问题是return语句。在java中是否可以将方法的结果存储在变量中?例如,在我的代码中,我初始化变量result以存储两个数字的gcd。但是返回的值不正确。但是,如果我删除变量结果,我得到了gcd的正确值,这让我想到了第二个问题:return语句。我不太清楚返回声明在这里做了什么。我在第一名中获得它的唯一原因是因为我的目标是将方法Recursion的结果存储在变量中。但就我已经尝试过而言,似乎只是弄乱了我的代码。

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

2 个答案:

答案 0 :(得分:1)

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

你的陈述if I remove the variable result,I get the correct value for the gcd是完全错误的。您获得了正确的结果 已打印 ,但未返回。这是因为您返回了错误的值。

  1. 从方法签名中删除余数,因为您的第一个语句是为其分配内容
  2. 返回正确的值:smaller而不是remained
  3. 返回else分支
  4. 这将产生以下代码:

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

答案 1 :(得分:0)

添加到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);
  }
}