2016-04-15 137 views
0

我想寫一個方法來決定一個整數是否好奇(它們等於它們的位數的階乘之和)用Java中的另一種方法調用方法

我寫了一個階乘方法。

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))很可能這部分是錯誤的。問題是什麼?

+1

「不行」是什麼意思?顯示完整的有效代碼示例。 – OldProgrammer

+1

通過'converted.charAt(i) - '0''替代'converted.charAt(i)' –

+0

這些代碼位於MyMath類中。我創建了一個測試者類並創建了一個名爲math1的新類。然後,在主要方法中,我寫了 System.out.println(math1。isCurious(145)); 它顯示錯誤。 –

回答

3

問題是因爲數字的char表示與該數字的整數值不同。這是該角色的ASCII編碼。如果要將char轉換爲其int值,則應該從中減去'0'char零)。

所以,你的代碼應該改成這樣:

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

Or:'sum + = factorial(Character.getNumericValue(converted.charAt(i)));' –

+2

或'sum + = factorial(Character。 digit(converted.charAt(i),10));' – Aaron

+0

不,這是字符的Unicode/UTF-16編碼。 ''0'也使用UTF-16編碼。並且對這些數字範圍內的字符進行編碼的算術奇蹟般地工作。 –

0

您使用INT作爲isCurious功能參數。您應該使用字符串作爲參數。您通過階乘(轉換.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; 
    } 

呼叫從主機能的研究此方法是這樣的:

是System.out.print(isCurious( 「1」)); //傳遞參數中的字符串

factorial(converted.charAt(i) - '0');。你可以通過ASCII的幫助來理解這一行。

假設converted.charAt(ⅰ)具有值'1'所以如果我們減去其等於在ASCII '0'從此其等於,然後'0'等於即49 - 48。這就是爲什麼我們從轉換字符中減去'0'

相關問題