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