将方法的结果存储在变量中
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 错误的值造成的。
- 从方法签名中删除剩余部分,因为您的第一条语句正在向它分配一些东西
- return 正确值:
smaller
而不是 remained
- 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);
}
}
在过去的几个月里,我转而使用函数式语言(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 错误的值造成的。
- 从方法签名中删除剩余部分,因为您的第一条语句正在向它分配一些东西
- return 正确值:
smaller
而不是remained
- 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);
}
}