控制流说明

时间:2019-06-28 15:03:49

标签: java control-flow

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

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

2 个答案:

答案 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。

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

  • 使用搜索引擎研究未知来源中的所有事物
  • 使用调试器或简单的System.out.printl()语句使自己观察代码在做什么
  • 然后,当所有这些都失败了,并给您带来疑问时,请过来寻求帮助

答案 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;
        }
    }
}