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;
}
}
我正在编写此代码,以确定数字在指定数字中出现的次数。当数字实际上在数字中时,代码工作,但当数字不在数字中时,程序将永远运行。我该如何解决这个问题?
答案 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=2
和digit=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
检查负数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);
}
}