我需要编写一个接收数字的方法,对于其中的任何偶数位,用0位替换它们。
我认为我正朝着正确的方向前进,但是当我使用调试器运行它时,我看到偶数数字在偶数位上不会返回0。
这是我到目前为止所做的。
我知道我的英语很差,所以这是一个示例。
对于数字12345,该方法应返回10305 对于数字332,该方法应返回330。
我希望这是可以理解的。这是我的代码:
public class Assignment1 {
public static void main(String[] args) {
System.out.println(Even(12345));
}
private static int Even(int n) {
if (n == 0 ) {
return 0 ;
}
if (n % 2 == 0) { // if its even
n= n/10*10; // we cut the right digit from even number to 0
return (n/10 %10 ) + Even(n/10)*0;
}
return Even(n/10)*10 +n;
}
}
答案 0 :(得分:1)
您的基本情况仅检查数字是否为零。检查此解决方案,如果您有疑问,请告诉我们!
public int evenToZero(int number){
//Base case: Only one digit
if(number % 10 == number){
if(number % 2 == 0){
return 0;
}
else{
return number
}
}
else{ //Recursive case: Number of two or more digits
//Get last digit
int lastDigit = number % 10;
//Check if it is even, and change it to zero
if(lastDigit % 2 == 0){
lastDigit = 0;
}
//Recursive call
return evenToZero(number/10)*10 + lastDigit
}
}
答案 1 :(得分:0)
下面是一个递归方法,可以满足您的需求。使用字符串会更容易,因为它允许您逐位“添加”数字。这样,使用332作为示例,3 + 3 + 0变为330,而不是6。
每次运行时,它会向右移动数字,因此332变为33,然后是3,然后是0.
public static void main(String[] args) {
System.out.println(Even(12345));
}
private static String Even(int n) {
if(n==0)
return "";
else if(n%2==0){
return Even(n/10) + "0";
}
else{
String s = Integer.toString(n%10);
return Even(n/10) + s;
}
}