控制流解释



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

相关内容

  • 没有找到相关文章

最新更新