检查两个三位数的数字在Java中是否有任何相同的数字

检查两个三位数的数字在Java中是否有任何相同的数字,java,if-statement,boolean,digits,mod,Java,If Statement,Boolean,Digits,Mod,我正试图用Java编写一个程序,检查其中一个数字中是否至少有一位与另一个数字中的一位匹配。例如,如果这两个数字是238和345,它应该返回一个特定的字符串到目前为止,这是我所拥有的,但它仅适用于最右边的数字: if ((computerGuess/10) == (userGuess/10) || (computerGuess%10) == (userGuess%10) || (computerGuess%10) == (userGuess/10) || (userGuess%10) == (co

我正试图用Java编写一个程序,检查其中一个数字中是否至少有一位与另一个数字中的一位匹配。例如,如果这两个数字是238和345,它应该返回一个特定的字符串
到目前为止,这是我所拥有的,但它仅适用于最右边的数字:

if ((computerGuess/10) == (userGuess/10) || (computerGuess%10) == (userGuess%10) || (computerGuess%10) == (userGuess/10) || (userGuess%10) == (computerGuess/10)) {
                System.out.println("You have won S1000");
                break;
            }

一个干净的解决方案是将每个数字转换成一组数字,然后检查重叠:

public Set<Integer> getDigits (int input) {
    Set<Integer> digits = new HashSet<>();
    while (input > 0) {
        digits.add(input % 10);
        input /= 10;
    }

    return digits;
}

int computerGuess = 238;
int userGuess = 345;
Set<Integer> computerDigits = getDigits(computerGuess);
Set<Integer> userDigits = getDigits(userGuess);
computerDigits.retainAll(userDigits);

if (computerDigits.size() > 0) {
    System.out.println("There is an overlap: " + computerDigits.toString());
}
公共设置getDigits(int输入){
Set digits=新的HashSet();
while(输入>0){
数字。添加(输入%10);
输入/=10;
}
返回数字;
}
int-computerGuess=238;
int userGuess=345;
设置computerDigits=getDigits(computerGuess);
设置userDigits=getDigits(userGuess);
计算机数字。保留(用户数字);
如果(computerDigits.size()>0){
System.out.println(“存在重叠:“+computerDigits.toString());
}

原因是您总是使用“10”,即“/10”或“%10”

最好的解决方案是将它们转换为字符串,并检查子字符串

String computerGuessStr = new String (computerGuess);
String userGuess = new String (userGuess);

for (int i=0;i<computerGuessStr.length();i++){

char computerChar = computerGuessStr.getCharAt(i);

if(userGuess.contains(computerChar)){
//do something
} else {
//do something
}
String computerGuess str=新字符串(computerGuess);
字符串userGuess=新字符串(userGuess);
对于(inti=0;i类似的东西

int computerNumber = 543;
int guess = 238;
List<Integer> numbers = Stream.of(10, 100, 1000).map(n -> guess % n).collect(Collectors.toList());

Stream.of(10,100,1000).map(n -> computerNumber % n).anyMatch(num -> numbers.contains(num));
int computerNumber=543;
int-guess=238;
List number=Stream.of(101001000).map(n->guess%n).collect(Collectors.toList());
Stream.of(101001000).map(n->computerNumber%n).anyMatch(num->numbers.contains(num));

另一个选项是普通旧循环。这将适用于任何长度数字

boolean digitMatch(int num1, int num2)
{
    for ( ; num1 > 0; num1 /= 10) {
        // Get a digit from num1
        int digit1 = num1 % 10;
        for (int n2 = num2; n2 > 0; n2 /= 10) {
            // Get a digit from num2
            int digit2 = n2 % 10;
            // compare
            if (digit1 == digit2) return true;
        }
    }
    return false;
}

注意:您需要为负数添加一点额外的代码。

这是否回答了您的问题?。语言不同,但您可以轻松地将其适应java@jhamonOP没有问JS。