在Java中的另一个方法中调用方法

时间:2016-04-15 15:25:25

标签: 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 = 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;
}

但它不起作用。 factorial(converted.charAt(i))很可能这部分是错误的。有什么问题?

2 个答案:

答案 0 :(得分:3)

问题是因为数字的char表示与该数字的整数值不同。这是该角色的https://oracle-base.com/articles/12c/multitenant-connecting-to-cdb-and-pdb-12cr1编码。如果您想将char转换为int值,则应从中减去'0'char零)。

所以你的代码应该改为:

sum = sum + factorial(converted.charAt(i) - '0');

答案 1 :(得分:0)

您在 isCurious函数中使用了int作为参数。您应该使用 string 作为参数。在您下面传递的 factorial(converted.charAt(i))已更改 到 factorial(converted.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;  
   }

从主要功能中调用此方法,如下所示:

  

是System.out.print(isCurious( “1”)); //在参数

中传递字符串

factorial(converted.charAt(i) - '0'); 。您可以在ASCII的帮助下理解这一行。

假设 converted.charAt(i)的值'1'在ASCII中等于 49 ,所以如果我们减去 '0'从此等于 48 ,然后 converted.charAt(i) - '0'等于 1 49 - 48 。这就是我们从转换后的字符中减去'0'的原因。