CodeWars:Persistent Bugger。需要解释+建议

时间:2016-03-18 22:17:51

标签: java

http://www.codewars.com/kata/55bf01e5a717a0d57e0000ec/train/java

  

写一个函数,持久性,它接受一个正参数num并返回它的乘法持久性,这是你必须将num中的数字相乘直到达到一个数字的次数。   例如:39 = [3*9] = 27 = [2*7] = 14 = [1*4] = 4因此输出为3(步数)

我尝试过这个KATA,但我收到了一个错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

我不知道为什么,请有人帮忙吗?我的代码如下:我认为我处理这个问题的方式远非复杂,但我已经尝试了替代路线,但无法继续使用它们。所以这就是我想出的:p.s.我是java和开发的新手,我认为你可以使用回归来解决方案,但我不完全确定。

import java.util.LinkedList;

public class Persist {

  static LinkedList<Long> digits = new LinkedList<Long>();
  public static void splitNumbersUp(long number){
     while(number > 0) {
        digits.push(number % 10);
        number /= 10;
    }
  }

  public static void clearDigits(){
    digits.clear();
  }

  public static long multiply(int length){
    long variable = 0;
    for(int i = 0 ; i < digits.size(); i++){
      variable = digits.pop() * digits.pop();
      digits.push(variable);
    }

    return variable;
  }

    public static int persistence(long n) {
        long num = 0;
    if(n > 10){
          while(!((digits.get(0) / 10) >= 1)){ 
              splitNumbersUp(n);
              num = multiply(digits.size());
              clearDigits();
              digits.push(num);
          }

    int i = (int)digits.get(0).intValue();
    return i;
    }else{
    return 0;
  }

  }
}

1 个答案:

答案 0 :(得分:2)

我相信首先调用此函数吗?

 public static int persistence(long n) {
    long num = 0;
if(n > 10){
      while(!((digits.get(0) / 10) >= 1)){ 
          splitNumbersUp(n);
          num = multiply(digits.size());
          clearDigits();
          digits.push(num);
      }
...

在这种情况下,问题是数字是空的,但是你试图得到它的一个元素。

如果我正确阅读您的代码,请将其更改为:

public static int persistence(long n) {
    long num = 0;
    splitNumbersUp(n); //This before the for loop
    if(n > 10){
          while(!((digits.get(0) / 10) >= 1)){ 
              splitNumbersUp(n);
              num = multiply(digits.size());
              clearDigits();
              digits.push(num);
          }

应该工作