编写一个名为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;
}
}
我不明白该代码如何检查匹配数字的所有可能性
此处:
while(numA>0){
int numADig=numA%10;
使用 modulo 操作员"获取"一个数字的最后数字,请参见此处以获取更多信息。因此,第一步从13中获取" 3"。
稍后,您做:
numA=numA/10;
将13变成1(int部门(!在做13/10 ..然后是1/10时停止的初始循环条件。
因此,这个循环将13变成3,然后将1个变成1,然后停止。
和相同的"方法"用于获取第二个数字的数字。并且,一旦您在>两个数字中找到一个数字,就可以返回true。
否则,如果您走了第一个数字的所有数字,并将它们与第二个数字中的所有数字进行了比较...没有匹配,请返回false。
在这里的真实答案,顺便说一句:当您不了解代码时:
时- 使用搜索引擎研究您不知道的源中的所有内容
- 使用debugger或simple system.out.printl((语句使自己能够观察代码在做什么
- 最后,当所有这些失败并留下怀疑时,然后来这里寻求帮助
在我的正确解决方案上看一下。
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;
}
}
}