import java.util.*;
public class number_guess_4digit_unique {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number = generateUnique4DigitNumber();
System.out.print("这是一个四位数的猜数字游戏(每位数字不重复),请输入一个1000-9999的四位数字: ");
int guess = getGuess(in);
int numGuesses = 1;
while (guess != number) {
while (hasDuplicateDigits(guess)) {
System.out.println("您输入的数字有重复数字,请重新输入一个每位数字都不相同的四位数字: ");
guess = getGuess(in);
}
int[] matchResults = matches(number, guess);
System.out.println("猜错啦,您的答案中有"+matchResults[0]+"个数字与正确答案相符");
System.out.println("其中有"+matchResults[1]+"个数字位置正确");
System.out.print("请重新输入一个1000-9999的四位数字(每位数字不重复): ");
guess = getGuess(in);
numGuesses++;
}
System.out.println("回答正确,共回答"+numGuesses+"次");
}
public static int generateUnique4DigitNumber() {
Random rand = new Random();
int number;
do {
number = 1000 + rand.nextInt(9000);
} while (hasDuplicateDigits(number));
return number;
}
public static boolean hasDuplicateDigits(int number) {
int[] digits = {
number / 1000,
(number / 100) % 10,
(number / 10) % 10,
number % 10
};
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < 4; j++) {
if (digits[i] == digits[j]) {
return true;
}
}
}
return false;
}
public static int[] matches(int number, int guess) {
int numMatches = 0;
int correctPositions = 0;
int[] numberDigits = {
number / 1000,
(number / 100) % 10,
(number / 10) % 10,
number % 10
};
int[] guessDigits = {
guess / 1000,
(guess / 100) % 10,
(guess / 10) % 10,
guess % 10
};
boolean[] numberMatched = new boolean[4];
boolean[] guessMatched = new boolean[4];
for (int i = 0; i < 4; i++) {
if (guessDigits[i] == numberDigits[i]) {
correctPositions++;
numberMatched[i] = true;
guessMatched[i] = true;
numMatches++;
}
}
for (int i = 0; i < 4; i++) {
if (!guessMatched[i]) {
for (int j = 0; j < 4; j++) {
if (!numberMatched[j] && guessDigits[i] == numberDigits[j]) {
numMatches++;
numberMatched[j] = true;
break;
}
}
}
}
return new int[]{numMatches, correctPositions};
}
public static int getGuess(Scanner in) {
int guess = getInt(in, "请输入一个1000-9999的四位数字: ");
while(guess < 1000 || guess > 9999) {
System.out.println("您输入的数字不在范围内,请重新输入。");
guess = getInt(in, "请输入一个1000-9999的四位数字: ");
}
return guess;
}
public static int getInt(Scanner in, String prompt) {
System.out.print(prompt);
while(!in.hasNextInt()) {
in.next();
System.out.println("您输入的不是数字,请重新输入。");
System.out.print(prompt);
}
return in.nextInt();
}
}