# 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;
targetNumber = 1;
targetNumber = 7;
targetNumber = 4;
targetNumber = 3;

int[] userGuess = new int;
userGuess = 1;
userGuess = 5;
userGuess = 6;
userGuess = 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");
}
}
``````