Java程序没有返回int值

4

我正在尝试在CodeWars上编写一个程序,其中要求persistent()函数返回一个整数。我难以以一种总是返回整数的方式来形成它。非常感谢您的任何帮助!

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
如果长度(product)!= 1,则添加返回值 - Brody
我不得不认真重构程序吗? - microslayer
你想要什么值? - Rustam
1
如果函数有返回值,那么必须始终在任何if/else块之外拥有一个返回语句。在if(length(product==1))块之后,如果该返回语句在正常操作期间不应被触发,就返回-99999999或其他错误代码。 - Prashanth Chandra
1
你完全不需要在return之前进行if检查。无论如何,只有当“length(product)== 1”时while循环才会终止。因此,只需删除该条件并返回即可。 - Codebender
显示剩余3条评论
3个回答

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
如果函数需要返回某些内容,那么你必须在任何 if/else 代码块之外至少有一个 return 语句。这不仅适用于 Java,而是任何类似的强类型语言。
在 if(length(product==1)) 代码块之后,如果该 return 语句在正常操作期间不应被触发,那么可以使用 return -99999999 或一些错误代码。

0

你的 while 循环只有在 length(product) 等于 1 时才会终止。因此,只需删除 if 条件并返回 numIterations


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接