Java程序没有结束

时间:2018-02-25 16:25:42

标签: java

public static void main(String[] args){
    System.out.println(digitCount(2, 2));
    System.out.println(digitCount(22, 2));
    System.out.println(digitCount(222, 2));
    System.out.println(digitCount(232, 2));
    System.out.println(digitCount(278, 2));
    System.out.println(digitCount(0, 0));
    System.out.println(digitCount(2, 1));//the problem lies here, but dont know why
}

public static int digitCount(int number, int digit){.
    int result=0;
    if(number<0){
        return (number*-1);//this is to accomodate positive or negative numbers
    }
    if(number<10 && number==digit){
         result++;
    }else if(number%10==digit){
         result++;
         result+= digitCount(number/10,digit);
    }else{
        result+=digitCount(number/10,digit);
    }

    return result;

}

}

我正在编写此代码,以确定数字在指定数字中出现的次数。当数字实际上在数字中时,代码工作,但当数字不在数字中时,程序将永远运行。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

使用数字2和数字1检查您的条件:

return

}

添加:

public static int digitCount(int number, int digit){.
    int result=0;
    if(number<0){ // false for 2
        return (number*-1);//this is to accomodate positive or negative numbers
    }
    if(number<10 && number==digit){ // false for number 2 and digit 1
         result++;
    }else if(number%10==digit){ // false for number 2 and digit 1
         result++;
         result+= digitCount(number/10,digit);
    }else{

        // endless recursion with number 0 and digit 1
        result+=digitCount(number/10,digit); 
    }

    return result;

}

并以

开头
 public static int digitCount(int number, int digit, int result){.
    if (number==0)
        return result; // needs to be passed in due to recursion

    if(number<0){ 
    ...

答案 1 :(得分:0)

让我们跳进你的参数,看看发生了什么!

您使用参数number=2digit=1调用您的函数:

public static int digitCount(int number, int digit){.
    int result=0;
    if(number<0){
        return (number*-1);//this is to accomodate positive or negative numbers
    }

我们的number大于0,所以到目前为止没有任何事情发生。

    if(number<10 && number==digit){
         result++;
    }

此处number小于10,但它不等于我们的digit,所以这不会运行,我们继续使用else块:

    else if(number%10==digit){
         result++;
         result+= digitCount(number/10,digit);
    }

对于我们number%10将是2,这不是我们的digit,所以这也不会运行......

    else{
        result+=digitCount(number/10,digit);
    }

所以这将被调用,而number/10将为0,因为它是一个整数,并且该函数将以(0,1)递归调用我们刚才遇到的相同问题。

你在这里没有做的就是有一个问题,当数字只有一位数,但它与你正在寻找的数字不匹配。只是阻止程序进入else块就足够了:

public static int digitCount(int number, int digit){.
    int result=0;
    if(number<0){
        return (number*-1);//this is to accomodate positive or negative numbers
    }
    if(number<10){
         if(number==digit){
              result++;
         }
    }else if(number%10==digit){
         result++;
         result+= digitCount(number/10,digit);
    }else{
        result+=digitCount(number/10,digit);
    }

    return result;

}

答案 2 :(得分:0)

具有更流畅的递归功能

  • 您不需要将结果存储在变量中
  • 使用Math.abs检查负数
  • 当你来0时返回0,如果它不是所需的数字
  • 当最后一位数字正确时:返回1 +在其余数字中查找用法
  • 当最后一位数字不是时:在其余数字中返回查找用法
public static int digitCount(int number, int digit) {
    number = Math.abs(number);
    if (number == 0 && digit != number) {
        return 0;
    } else if (number < 10 && number == digit) {
        return 1;
    } else if (number % 10 == digit) {
        return 1 + digitCount(number / 10, digit);
    } else {
        return digitCount(number / 10, digit);
    }
}