在Java中的另一个方法中调用方法
我试图写一个方法来决定一个整数是否奇怪(等于它们的数字的阶乘之和) 我写了一个阶乘方法在Java中的另一个方法中调用方法,java,methods,Java,Methods,我试图写一个方法来决定一个整数是否奇怪(等于它们的数字的阶乘之和) 我写了一个阶乘方法 public int factorial(int n) { if (n==0) return 1; else return n*factorial(n-1); } 然后是另一个方法,如果这个数字很奇怪,它将返回true public boolean isCurious(int y) { String converted = String.valueOf(y); int sum
public int factorial(int n)
{
if (n==0) return 1;
else return n*factorial(n-1);
}
然后是另一个方法,如果这个数字很奇怪,它将返回true
public boolean isCurious(int y)
{
String converted = String.valueOf(y);
int sum = 0; //sum of factorials
for(int i=0; i<converted.length(); i++)
{
sum = sum + factorial(converted.charAt(i));
}
if (sum==y) return true;
else return false;
}
public boolean isCurious(int y)
{
转换的字符串=字符串。值(y);
int sum=0;//阶乘和
对于(int i=0;i而言,问题在于数字的char
表示形式与该数字的整数值不同。这是该字符的编码。如果要将char
转换为其int
值,则应从中减去'0'
(字符char
零)
因此,您的代码应更改为:
sum = sum + factorial(converted.charAt(i) - '0');
问题是,数字的char
表示形式与该数字的整数值不同。这是该字符的编码。如果要将char
转换为其int
值,则应从中减去'0'
(char
零)
因此,您的代码应更改为:
sum = sum + factorial(converted.charAt(i) - '0');
您在isCurious函数中使用int作为参数。您应该使用string作为参数。下面您传递了阶乘(已转换。字符(i))已更改
到阶乘(转换为.charAt(i)-“0”)以使该字符的行为类似于int值
代码片段如下所示:
> public boolean isCurious(String y) {
> String converted = String.valueOf(y);
> int sum = 0; //sum of factorials
> for(int i=0; i<converted.length(); i++)
> {
> sum = sum + factorial(converted.charAt(i) - '0');
>
> }
>
> int temp = Integer.parseInt(y);
> if (sum==temp) return true;
> else return false;
}
>公共布尔值不连续(字符串y){
>转换的字符串=字符串。值(y);
>int sum=0;//阶乘和
>对于(int i=0;i{
>总和=总和+阶乘(转换为字符(i)-“0”);
>
> }
>
>int temp=整数。parseInt(y);
>if(sum==temp)返回true;
>否则返回false;
}
从主函数调用此方法,如下所示:
System.out.print(isCurious(“1”);//传入参数中的字符串
阶乘(已转换的.charAt(i)-“0”);您可以借助ASCII来理解这一行
假设转换后的.charAt(i)的值'1'在ASCII中等于49,那么如果我们从中减去'0',它等于48,那么转换后的.charAt(i)-'0'等于1,即49-48。因此,我们从转换后的字符中减去'0'。您在非连续函数中使用int作为参数。您应该使用字符串作为参数。下面您传递了阶乘(转换后的.charAt(i))已更改
到阶乘(转换为.charAt(i)-“0”)以使该字符的行为类似于int值
代码片段如下所示:
> public boolean isCurious(String y) {
> String converted = String.valueOf(y);
> int sum = 0; //sum of factorials
> for(int i=0; i<converted.length(); i++)
> {
> sum = sum + factorial(converted.charAt(i) - '0');
>
> }
>
> int temp = Integer.parseInt(y);
> if (sum==temp) return true;
> else return false;
}
>公共布尔值不连续(字符串y){
>转换的字符串=字符串。值(y);
>int sum=0;//阶乘和
>对于(int i=0;i{
>总和=总和+阶乘(转换为字符(i)-“0”);
>
> }
>
>int temp=整数。parseInt(y);
>if(sum==temp)返回true;
>否则返回false;
}
从主函数调用此方法,如下所示:
System.out.print(isCurious(“1”);//传入参数中的字符串
阶乘(已转换的.charAt(i)-“0”);您可以借助ASCII来理解这一行
假设转换后的.charAt(i)的值'1'在ASCII中等于49,那么如果我们从中减去'0',它等于48,那么转换后的.charAt(i)-“0”等于1,即49-48。这就是为什么我们从转换后的字符中减去“0”。什么是“不起作用”的意思?显示完整有效的代码示例。将转换后的.charAt(i)替换为转换后的.charAt(i)-“0”
这些代码在MyMath类中。我创建了一个tester类,并创建了该类的一个新对象math1。然后,在main方法中,我编写了System.out.println(math1.isCurious(145));它显示false。也许您会得到一个错误的结果(甚至是StackOverflower错误),您必须检查整数是否小于0,这样您就不会处理并引发异常,因为负数不存在阶乘,但在您的情况下,如果您向阶乘方法提供负整数,递归调用将不会停止(用于逃避bug的防御性编程),但如果您将Mooore内存分配给Java,您将得到一个整数溢出,该整数将为0,您将得到一个错误的结果:)@AndyTurner是的,在一般情况下(语言环境未知)。只是提出了一个快速解决方案。实际上,integer.toString()
产生标准的0-9位数字,这里不需要关心它。唯一需要关心的是可能的-
符号,因为它会在这里发出堆栈溢出。“不工作”是什么意思?显示完整有效的代码示例。将转换的.charAt(i)
替换为转换的.charAt(i)-“0”
这些代码在MyMath类中。我创建了一个tester类,并创建了该类的一个新对象math1。然后,在main方法中,我编写了System.out.println(math1.isCurious(145));它显示false。也许您会得到一个错误的结果(甚至是StackOverflower错误),您必须检查整数是否小于0,这样您就不会处理并引发异常,因为负数不存在阶乘,但在您的情况下,如果您向阶乘方法提供负整数,递归调用将不会停止(用于逃避bug的防御性编程),但如果您将Mooore内存分配给Java,您将得到一个整数溢出,该整数将为0,您将得到一个错误的结果:)@AndyTurner是的,在一般情况下(语言环境未知)。刚刚提出了一个快速解决方案。实际上,integer.toString()
生成了标准