编写一个名为hasSharedDigit的方法,该方法具有两个类型为int的参数。
数字介于10到99之间
如果两个数字中都出现一个数字,例如12和23中为2,则该方法应返回true;否则,该方法应返回false。
我有一个解决方案,但不太了解它是如何工作的。我需要英文解释。
public class SharedDigit {
public static boolean hasSharedDigit(int numA,int numB){
if((numA<10||numA>99)||(numB<10||numB>99)){
return false;
}
int realNumB=numB;
while(numA>0){
int numADig=numA%10;
while(numB>0){
int numBDig=numB%10;
if(numADig==numBDig){
return true;
}
numB=numB/10;
}
numA=numA/10;
numB=realNumB;
}
return false;
}
}
我不明白这段代码如何检查所有匹配数字的可能性
答案 0 :(得分:2)
这里:
while(numA>0){
int numADig=numA%10;
使用取模运算符“获取”数字的最后一位,有关更多信息,请参见here。因此,第一步是从13获得“ 3”。
稍后,您这样做:
numA=numA/10;
将13变成1(整数除法)!之前的初始循环条件确保您在执行13/10 ..然后执行1/10时停止。
因此,此循环将13变成3,然后是1,然后停止。
相同的“方法”用于获取第二个数字的数字。并且,一旦您在两个数字中找到一个数字,就可以返回true。
否则,如果您穿过第一个数字的所有数字,然后将它们与第二个数字的所有数字进行比较...不匹配,则返回false。
真正的答案是,顺便说一句:当您不了解代码的作用时:
答案 1 :(得分:0)
看看我的正确解决方案。
public class SharedDigit {
public static boolean hasSharedDigit (int one, int two) {
int modulusOne = one % 10;
int modulusTwo = two % 10;
int divisionOne = one / 10;
int divisionTwo = two / 10;
if ((one < 10 || one > 99) || (two < 10 || two > 99)) {
return false;
} else if (one == two){
return true;
} else if (modulusOne == modulusTwo){
return true;
} else if (divisionOne == divisionTwo){
return true;
} else if (divisionOne == modulusTwo){
return true;
} else if (divisionTwo == modulusOne){
return true;
} else {
return false;
}
}
}