2015-08-18 73 views
4

我正在嘗試CodeWars上的程序,其中一個要求是persistent()函數返回一個int。我無法以它總是返回一個int的方式構造它。任何幫助是極大的讚賞!Java程序不返回Int

public class Persist 
{ 
    public static int persistence(int n) 
    { 
    int product = n; 
    int numReiterations = 0; 

    while (length(product) != 1) 
    { 
     product = multiplyDigits(product); 
     numReiterations++; 
    } 

    if (length(product) == 1) 
     return numReiterations; 
    } 

    public static int multiplyDigits(int num) 
    { 
    int product = 1; 

    for (int x=0; x<String.valueOf(num).length(); x++) 
    { 
     char numChar = String.valueOf(num).charAt(x); 
     int numBack = Integer.parseInt(String.valueOf(numChar)); 
     product *= numBack; 
    } 

    return product; 
    } 

    public static int length(int product) 
    { 
    return String.valueOf(product).length(); 
    } 
} 
+1

如果長度(產品)!= 1 – Brody

+0

添加一個返回值我不需要認真重組程序嗎? – microslayer

+0

你想要什麼價值? – Rustam

回答

4

我根本不會使用字符串算術。你也不需要再次檢查數字的長度,因爲你知道它必須是1,你剛剛打破了while循環。

如果使用字符串處理,它不僅更長,而且更慢。我還會使用long而不是int,因爲這樣可以以較小的成本獲得更大的數字。

public static int persistence(long n) { 
    int numReiterations = 0; 

    for (long product = n; !isSingleDigit(product); product = multiplyDigits(product)) 
     numReiterations++; 

    return numReiterations; 
} 

public static long multiplyDigits(long num) { 
    long product = 1; 
    for (; num > 0; num /= 10) 
     product *= num % 10; 
    return product; 
} 

public static boolean isSingleDigit(long n) { 
    return n <= 9; 
} 

public static void main(String[] args) { 
    System.out.println(persistence(99999999999999999L)); 
} 

打印

3 
0

,你必須始終至少有一個return語句任何的if/else塊函數是否應該返回的東西。
不只是Java,而是任何類似的強類型語言。

之後if(length(product==1)) block,return -99999999或某些錯誤代碼如果在正常操作期間不應該擊中該返回。

0

您的while循環僅在length(product)等於1時終止。因此,只需通過刪除if條件返回numIterations即可終止。