首页 > 解决方案 > 控制流说明

问题描述

编写一个名为 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;
    }
}

我不明白这段代码如何检查匹配数字的所有可能性

标签: javacontrol-flow

解决方案


这里:

while(numA>0){
  int numADig=numA%10;

使用运算符“获取”数字的最后一位,请参阅此处了解更多信息。所以这第一步让你得到例如 13 中的“3”。

稍后,您执行以下操作:

 numA=numA/10;

这将 13 变成 1(整数除法)!之前的初始循环条件确保您在执行 13 / 10 .. 然后 1 / 10 时停止。

所以这个循环将 13 变成 3,然后是 1,然后停止。

并且使用相同的“方法”来获取第二个数字的数字。一旦你在两个数字中找到一个数字,你就可以返回 true。

否则,如果您遍历第一个数字的所有数字,并将它们与第二个数字中的所有数字进行比较……不匹配,返回 false。

顺便说一句,这里的真正答案是:当您不了解代码的作用时:

  • 使用搜索引擎来研究你不知道的来源中的所有东西
  • 使用调试器或简单的 System.out.printl() 语句让您自己观察代码在做什么
  • 最后,当所有这些都失败了,让你有疑问时,来这里寻求帮助

推荐阅读