Tout d'abord, j'ai créé une classe BackEnd qui sera responsable de tout le travail du programme. Il a des champs:
private int length; //
private int[] mas; //
private int[] inputArray; //,
L'idée est la suivante: l'ordinateur génère un nombre mas de longueur, l'utilisateur entre le nombre inputArray et voit combien il y a de taureaux et de vaches, après quoi il gagne ou continue à jouer. Tout d'abord, nous allons afficher le tableau mas pour voir le numéro et déboguer le code. alors nous supprimerons cette ligne. Écrivons la sortie d'un tableau de longueur arbitraire:
private void printMas(int[] mas) {
for (int i = 0; i < length; i++) {
System.out.print(mas[i] + " ");
}
}
Nous passons un tableau à cette méthode, que nous sortirons via la boucle for. Cela aurait pu être fait par le biais du champ, mais comme nous allons d'abord afficher mas, puis inputArray, j'ai décidé de le faire.
Nous devons maintenant créer une génération de nombres. vous pouvez le faire avec des fonctions standard, mais n'oubliez pas que nous avons besoin de chiffres différents dans le numéro. Cela signifie que le nombre 45566 ne fonctionnera pas, mais 45367 sera parfait. Écrivons une méthode pour générer un tel nombre avec la vérification des chiffres, mais d'abord, découvrons combien de temps l'utilisateur veut deviner le nombre:
private void getMas() {
Scanner scanner = new Scanner(System.in);
do {
System.out.println(" 1 10");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
length = scanner.nextInt();
} while (length <= 0 || length > 10);
setMas(createMas());
}
Nous créons un objet scanner avec lequel nous obtiendrons le numéro de la console. Ensuite, nous utilisons une boucle avec une post-condition do while. J'expliquerai pourquoi c'est un peu plus tard. Dans le corps de la boucle, nous voyons une boucle while. il est utilisé pour vérifier qu'un nombre est entré dans la console, pas une fraction, des lettres, etc. Après avoir vérifié que le nombre est entré dans la console, nous écrivons sa valeur en longueur. Et maintenant nous vérifions qu'il appartient à l'intervalle [0,10) en utilisant la postcondition do while. Si un nombre est entré qui n'est pas inclus dans l'intervalle, nous vous demandons à nouveau d'entrer la longueur. Si le numéro est entré correctement à la fois, nous générons le numéro en utilisant la méthode createMas et changeons la valeur du champ mas:
public void setMas(int[] mas) {
this.mas = mas;
}
private int[] createMas() {
int[] arr = new int[length];
for (int i = 0; i < this.length; i++) {
arr[i] = (int) (Math.random() * 10);
}
boolean checkMas = false;
while (!checkMas) {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
arr[j] = (int) (Math.random() * 10);
}
}
}
}
boolean check = false;
for (int i = 0; i < arr.length && !check; i++) {
for (int j = 0; j < arr.length && !check; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
check = true;
checkMas = false;
} else checkMas = true;
}
}
}
}
return arr;
}
Laissez-moi vous expliquer comment fonctionne createMas. Tout d'abord, nous créons un tableau de longueur et le remplissons avec des nombres aléatoires de l'intervalle [0,10). Math.random () génère un nombre aléatoire à partir de l'intervalle [0,1), et en le multipliant par 10, nous obtenons un nombre dans l'intervalle [0,10). Nous avons maintenant un tableau arr, qui se compose de chiffres aléatoires. L'étape suivante consiste à vérifier les nombres répétés. J'ai décidé de le faire en utilisant des variables booléennes. Tout d'abord, nous comparons chaque élément avec chacun et, en cas de correspondance, changeons l'élément avec lequel nous comparons par un nombre aléatoire. Après avoir comparé tous les éléments, nous vérifions le tableau pour l'unicité des chiffres. pour cela, j'ai également créé la variable check. Ensuite, nous comparons simplement chaque élément avec chacun. Si vous trouvez 2 éléments identiques, quittez le pour comparaison (puisque! Check retournera faux et les boucles se termineront),et revenez aux boucles for pour changer les mêmes nombres. Une fois que tous les nombres du tableau sont différents, la variable checkMas devient vraie et la vérification du tableau se termine. Nous retournons maintenant le tableau arr et créons le champ mas = arr.
Nous avons maintenant un numéro conçu par ordinateur. Implémentons une estimation de ce nombre par l'utilisateur. Pour ce faire, écrivons la méthode checkInput:
private void checkInput() {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[length];
if (length == 1) System.out.println(" " + length + " ");
else {
if (length > 1 && length < 5) {
System.out.println(" " + length + " ");
} else {
if (length > 4 && length < 11) {
System.out.println(" " + length + " ");
}
}
}
boolean checkMas = false;
while (!checkMas) {
for (int i = 0; i < length; i++) {
do {
System.out.println(" ");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
arr[i] = scanner.nextInt();
if(arr[i] < 0 || arr[i]>=10) System.out.println(" 0 9 ");
} while (arr[i] < 0 || arr[i] >= 10);
}
boolean check = checkInputArray(arr);
if (check) {
checkMas = true;
} else {
System.out.println(" ");
System.out.println(" ");
}
}
setInputArray(arr);
}
De même, nous créons un scanner et un tableau auxiliaire arr de longueur. Vient ensuite un tas de ifs, qui ne sont responsables que de faire correspondre un nombre et une phrase. Après eux, il y a une entrée directe et une vérification du numéro de l'utilisateur. Pour qu'il n'y ait pas de désaccord dans la logique avec l'utilisateur, j'ai décidé de faire en sorte que l'utilisateur entre chaque numéro séparément.
for (int i = 0; i < length; i++) {
do {
System.out.println(" ");
while (!scanner.hasNextInt()) {
System.out.println(" ");
scanner.next();
}
arr[i] = scanner.nextInt();
if(arr[i] < 0 || arr[i]>=10) System.out.println(" 0 9 ");
} while (arr[i] < 0 || arr[i] >= 10);
}
C'est dans cette section du code que le numéro est saisi et vérifié. Le travail est similaire à la saisie de la longueur du tableau, donc je ne vois aucune raison de l'expliquer. Ensuite, le tableau utilisateur est vérifié pour la présence des mêmes numéros. Pour ce faire, écrivons la méthode checkInputArray:
private boolean checkInputArray(int[] arr) {
boolean checkMas = false;
boolean check = false;
for (int i = 0; i < arr.length && !check; i++) {
for (int j = 0; j < arr.length && !check; j++) {
if (i != j) {
if (arr[i] == arr[j]) {
check = true;
checkMas = false;
} else checkMas = true;
}
}
}
return checkMas;
}
La vérification est similaire à la vérification d'un tableau caché, donc je ne m'attarderai pas dessus. Si le numéro de l'utilisateur contient des numéros en double, nous vous demandons de saisir à nouveau le numéro entier. Et ainsi de suite jusqu'à ce qu'il soit correctement saisi. Ensuite, nous changeons la valeur du champ inputArray en notre tableau auxiliaire arr. Au cas où, je donnerai le code:
public void setInputArray(int[] inputArray) {
this.inputArray = inputArray;
}
À ce stade, nous avons deux tableaux: le tableau caché et le tableau d'entrée. Il est temps de savoir combien de taureaux et combien de vaches l'utilisateur a trouvé.
Nous le découvrirons en utilisant la méthode checkCowAndBull:
private int[] checkCowAndBull() {
int[] arr = new int[2];
int cow = 0;
int bull = 0;
for (int i = 0; i < length; i++) {
for (int j = 0; j < length; j++) {
if (mas[i] == inputArray[j]) {
if (i == j) bull++;
else cow++;
}
}
}
arr[0] = cow;
arr[1] = bull;
return arr;
}
Nous créons un tableau auxiliaire de 2 éléments. Le premier est le nombre de vaches, le second est le nombre de taureaux. Ensuite, nous parcourons les deux tableaux, en comparant les éléments. Si les éléments sont égaux et leurs indices égaux, alors nous augmentons le nombre de taureaux, sinon nous augmentons le nombre de vaches. Après cela, nous écrivons les valeurs dans le tableau et le retournons.
Il est temps de comprendre ce qu'il y avait dans le constructeur de la classe BackEnd pendant tout ce temps.
public BackEnd() {
getMas();
//printMas(mas);
boolean win = false;
while (!win) {
checkInput();
System.out.println(" :");
printMas(inputArray);
System.out.println();
int[] arr = checkCowAndBull();
if (arr[1] == length) {
win = true;
System.out.println("! !");
} else {
System.out.println(" " + arr[0] + " , " + arr[1] + " ");
System.out.println(" ");
}
}
}
Tout d'abord, nous générons le tableau prévu. Je l'ai sorti pour le débogage, mais cette fonction n'est pas nécessaire pour le jeu. Puisque nous ne savons pas à partir de quelle tentative l'utilisateur devinera le nombre, nous démarrons la boucle while jusqu'au moment approprié. Ensuite, nous demandons à l'utilisateur de saisir son numéro, d'afficher le tableau saisi, de vérifier le nombre de taureaux et de vaches. Si le nombre de taureaux coïncide avec la longueur du tableau, le nombre est deviné et le jeu se termine. Sinon, le nombre de taureaux et de vaches est affiché et le jeu continue.
Il ne reste plus qu'à ajouter la création d'une instance de la classe à man:
public class main {
public static void main(String[] args) {
BackEnd bk = new BackEnd();
}
}
Nous lançons, vérifions, jouons.
Merci pour votre attention, la deuxième partie arrivera bientôt.