Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序没有结束_Java - Fatal编程技术网

Java程序没有结束

Java程序没有结束,java,Java,} 我写这段代码是为了确定一个数字在指定的数字中出现了多少次。当数字实际在数字中时,代码工作,但当数字不在数字中时,程序将永远运行。如何解决此问题?使用数字2和数字1检查您的状况: public static void main(String[] args){ System.out.println(digitCount(2, 2)); System.out.println(digitCount(22, 2)); System.out.println(digitCount(

}


我写这段代码是为了确定一个数字在指定的数字中出现了多少次。当数字实际在数字中时,代码工作,但当数字不在数字中时,程序将永远运行。如何解决此问题?

使用数字2和数字1检查您的状况:

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;

}

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

您正在使用参数number=2和digit=1调用函数:

这里的数字小于10,但它不等于我们的数字,所以这不会运行,我们继续到else块:

    if(number<10 && number==digit){
         result++;
    }
对我们来说,数字%10将是2,这不是我们的数字,所以这也不会运行

    else if(number%10==digit){
         result++;
         result+= digitCount(number/10,digit);
    }
这个函数将被调用,使用数字/10,因为它是一个整数,它将是0,函数将被递归调用,使用0,1,与我们刚才遇到的问题相同

你在这里没有做到的是,当数字只有一个数字长,但它与你要寻找的数字不匹配时,你有一个陷阱。仅阻止程序进入else块就足够了:

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

有一个更流畅的递归函数

您不需要将结果存储在变量中 使用Math.abs检查负数 如果不是所需的数字,则返回0 当最后一位数字正确时:返回1+在其余数字中查找用法 当最后一个数字不是时:返回查找剩余数字中的用法
Java!==Javascript当数字达到0时不会停止递归,除非数字也为0。您需要一个if number==0返回0;你还有另一个bug。尝试System.out.printlndigitCount-123,2;
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);
    }
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;

}
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);
    }
}