Java 查找两个数字之间的相似整数

Java 查找两个数字之间的相似整数,java,Java,有两个数字变量。我想确认并打印这两个数字之间类似的整数。例如,Int num1=6229;int num2=2394。我希望程序打印“2”和“9”的共享整数,并返回“true”进行确认 public class Main { public static void main(String[] args) { System.out.println(hasSharedDigit(6229, 2394)); } public static boolean ha

有两个数字变量。我想确认并打印这两个数字之间类似的整数。例如,Int num1=6229;int num2=2394。我希望程序打印“2”和“9”的共享整数,并返回“true”进行确认

public class Main {

    public static void main(String[] args) {
        System.out.println(hasSharedDigit(6229, 2394));
    }

    public static boolean hasSharedDigit(int firstNumber, int secondNumber) {

        int firstDigit;
        int secondDigit;

        while ((firstNumber > 0) && (firstNumber < 10000)) {
            firstDigit = firstNumber % 10;
            firstNumber /= 10;
            while ((secondNumber > 0) && (secondNumber < 10000)) {
                secondDigit = secondNumber % 10;
                secondNumber /= 10;
                if (!(firstDigit == secondDigit)) {
                    continue;
                }
                System.out.println(secondDigit);
                return true;
            }
        }
        return false;
    }
}
Don't Repeat Yourself指导您将重复的代码移动到可重用的帮助器方法中,因此您应该创建一个方法,将数字的数字提取到一个集合中,这样您就可以轻松地使用它来查找它们的共同数字

为此,a是最合适的集合,因此您可以这样编写帮助器方法:

private static BitSet digitsOf(int number) {
    BitSet digits = new BitSet(10);
    do {
        digits.set(number % 10);
    } while ((number /= 10) != 0);
    return digits;
}
现在很容易找到两个数字的碎片数字:

public static boolean hasSharedDigit(int firstNumber, int secondNumber) {
    BitSet digits = digitsOf(firstNumber);
    digits.and(digitsOf(secondNumber));
    System.out.println(digits);
    return ! digits.isEmpty();
}
试验

输出

{2, 9} 符合事实的 {} 错误的 {0} 符合事实的
你没有说它是如何不起作用的,但如果它是真的,那么它就不可能是对的。您必须在最外层的while循环外将一个声明为false的布尔变量设置为true,在找到匹配项时将其设置为true,然后在末尾返回它,而不是返回false。首先,您要查找的术语是数字中使用的单个字符,如9或3。整数是int包含的整数,比如-668。其次,您应该解释问题是什么:它在哪里失败,它应该做什么,以及是否有任何错误消息。此外,您为什么要检查在循环条件下firstNumber和secondNumber是否大于10000?因为它们不能在循环中增长,所以只需在方法开始时检查它们。
System.out.println(hasSharedDigit(6229, 2394));
System.out.println(hasSharedDigit(0, 123));
System.out.println(hasSharedDigit(0, 404));