Java 将方法的结果存储在变量中
在过去的几个月里,我改用函数式语言(Racket)编程,最近又重新开始用Java编程,所以我对一些概念有点困惑 以下(简化版)代码是欧几里德算法的实现。它很好用。我的问题是返回语句。在java中是否可以将方法的结果存储在变量中?例如,在我的代码中,我初始化变量result以存储两个数字的gcd。但返回的值不正确。然而,如果我删除变量result,我会得到gcd的正确值,这就引出了我的第二个问题:return语句。我不太明白return语句在这里做什么。我把它放在第一位的唯一原因是,我的目标是将方法递归的结果存储在一个变量中。但就我所尝试的而言,似乎只是把我的代码弄乱了 主要目标:将两个数字的gcd结果存储在一个变量中,以便在其他地方重复使用 有没有办法让这成为可能? 如有任何建议,将不胜感激Java 将方法的结果存储在变量中,java,return,greatest-common-divisor,Java,Return,Greatest Common Divisor,在过去的几个月里,我改用函数式语言(Racket)编程,最近又重新开始用Java编程,所以我对一些概念有点困惑 以下(简化版)代码是欧几里德算法的实现。它很好用。我的问题是返回语句。在java中是否可以将方法的结果存储在变量中?例如,在我的代码中,我初始化变量result以存储两个数字的gcd。但返回的值不正确。然而,如果我删除变量result,我会得到gcd的正确值,这就引出了我的第二个问题:return语句。我不太明白return语句在这里做什么。我把它放在第一位的唯一原因是,我的目标是将方
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:()()))