Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中的另一个方法中调用方法_Java_Methods - Fatal编程技术网

在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()
生成了标准