在过去的几个月里,我转而使用函数式语言(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;
}
}
答案 0 :(得分:1)
正如我的评论所说,你的逻辑是错误的。
你的陈述if I remove the variable result,I get the correct value for the gcd
是完全错误的。您获得了正确的结果 已打印 ,但未返回。这是因为您返回了错误的值。
smaller
而不是remained
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);
}
}
答案 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);
}
}