How to compare different positions of digits of two integers?

Refresh

November 2018

Views

479 time

2

I am creating a simple number game in Java.

Simply, the game is all about guessing numbers.

However, I want to add a function to check if the numbers are correct or not.

For example:

int targetNumber = 1743;
int userGuess = 1564;

Now, since the digit 1 in userGuess belongs in the accurate position with targetNumber, it would print out the letter A.

The digits 5 and 6 in userGuess doesn't belong anywhere in targetNumber, it would print out the letter I (Stands for Inaccurate).

However, the digit 4 does belong in targetNumber but not it its ACCURATE position. In this case, it would print out the letter S (Stands for Semi-Accurate).

I'm strugging checking semi-accurate digits, I have already separated the digits from both userGuess and targetNumber, and stored them in two arrays like this:

int[] targetNumber = new int[4];
targetNumber[0] = 1;
targetNumber[1] = 7;
targetNumber[2] = 4;
targetNumber[3] = 3;

int[] userGuess = new int[4];
userGuess[0] = 1;
userGuess[1] = 5;
userGuess[2] = 6;
userGuess[3] = 4;

Any ideas on how to do that?

Any help would be appreciated.

4 answers

2

Это не очень оптимальное решение. Но вы можете сделать что-то вроде этого:

    public class Test {
    public static void main(String args[]) {
        int targetNumber = 1743;
        int userGuess = 1564;
        String target = "" + targetNumber;
        String guess = "" + userGuess;

        for (int i = 0; i < guess.length(); i++) {
            char ch = guess.charAt(i);
            int j = target.indexOf(ch);
            if (j == -1) {
                System.out.println("I");
            } else if (j == i) {
                System.out.println("A");
            } else {
                System.out.println("S");
            }
        }
    }
}
6

Если вы храните их во ArrayList<Integer> numbers, то вы можете просто позвонить numbers.contains(yourInt). В противном случае вы могли бы начать с booleanи итерацию по списку настроек его trueи , breakingесли вы когда - нибудь найти.

2

Я предлагаю делать это без сохранения цифры по отдельности в виде списка. Сначала преобразовать как в String. Затем запустите цикл для перебора каждого символа. Если символы в текущем индексе обеих строк одинаковы, дисплей «A». В противном случае, проверьте - если символ вообще существует targetNumber; если он делает, дисплей «S», иначе дисплей «I».

public static void function(int targetNumber, int userGuess){
    String a = Integer.toString(targetNumber), 
           b = Integer.toString(userGuess);
    for(int i=0 ; i<4; i++){
        if(a.charAt(i) == b.charAt(i))
            System.out.print("A");
        else{
            if(a.indexOf(b.charAt(i)) == -1)
                System.out.print("I");
            else
                System.out.print("S");
        }
    }
}

В вашем случае, так как ваш targetNumber является 1743 и userGuess является 1564, вы должны позвонить

function(1743, 1564);

который будет отображать выходные данные в виде

AIIS
1
    int[] targetNum = {1, 7, 4, 3};
    int[] userGuess = {1, 5, 6, 4};

    List<Integer> targetList = IntStream.of(targetNum).boxed().collect(Collectors.toList());
    List<Integer> guessList = IntStream.of(userGuess).boxed().collect(Collectors.toList());


    for (Integer currentGuess : guessList) {
        if(targetList.contains(currentGuess)) {
            int targetIndex = targetList.indexOf(currentGuess);
            int guessIndex = guessList.indexOf(currentGuess);

            if(targetIndex == guessIndex) {
                System.out.println("A");
            } else {
                System.out.println("S");
            }
        } else {
            System.out.println("I");
        }
    }