#java #for-loop
#java #для цикла
Вопрос:
Я пытаюсь создать игру с угадыванием букв, в которой пользователю нужно угадать букву между A — Z, и если угаданная буква неверна, это говорит о том, что буква выше или ниже, чем предполагалось. Я создал код, который делает это правильно, но я не могу добавить цикл, который будет повторять код, пока пользователь не угадает правильную букву. Я новичок, поэтому немного объяснений и помощи было бы очень приятно.
Вот мой код:
import java.util.Scanner;
public class GuessTheLetter {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Guess the Letter");
String myLetter = scan.nextLine();
char enteredLetter = Character.toUpperCase(myLetter.charAt(0));
int[] range = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
char[] characters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
char randomLetter = characters[(int) (Math.random() * 26)];
int userInputToInt = 0;
int userInputControlLoop = 0;
int computerInputToInt = 0;
for (int i = 0; i < characters.length; i) {
if (randomLetter == characters[i]) {
computerInputToInt = range[i];
}
}
for (char i : characters) {
if (enteredLetter == i) {
userInputToInt = range[userInputControlLoop];
}
userInputControlLoop;
}
if (enteredLetter == randomLetter) {
System.out.println("Correct Guess");
System.out.println("The letter is:" randomLetter);
}
else if (userInputToInt > computerInputToInt) {
System.out.println("Incorrect Guess");
System.out.println("The letter is too high");
System.out.println("The letter is:" randomLetter);
}
else if (userInputToInt < computerInputToInt) {
System.out.println("Incorrect Guess");
System.out.println("The letter is too low");
System.out.println("The letter is:" randomLetter);
scan.close();
}
}
}
Комментарии:
1. для этого вы можете использовать логическую переменную
while(thisBoolean){ // your code, and then here set it to true when letter was guessed}
2. Вы решили эту проблему?
Ответ №1:
Это то, чего ты хочешь:
import java.util.Scanner;
public class GuessTheLetter {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Guess the Letter:-n");
char randomLetter = (char) (Math.random() * 26 65); // logic to generate random letter
char enteredLetter = 0; // initializing variable to store entered letter
while (true) {// infinite loop till correct guess
System.out.print("nEnter your Guess : ");
enteredLetter = Character.toUpperCase(scan.next().charAt(0)); // emter letter
if (enteredLetter == randomLetter) {
System.out.println("Correct Guess");
System.out.println("The letter is:" randomLetter);
break;// exit loop if correct letter is guessed
} else if (enteredLetter > randomLetter) // we can directly compare char like int
{
System.out.println("Incorrect Guess");
System.out.println("The letter entered is too high");
}
else if (enteredLetter < randomLetter) // we can directly compare char like int
{
System.out.println("Incorrect Guess");
System.out.println("The letter entered is too low");
}
}
scan.close();
}
}
Пояснения приведены в комментариях к программе!
Комментарии:
1. это не то, что я написал в комментариях, а также просто ссылка на раздел комментариев не является хорошим стилем для ответа на вопрос
2. Большое вам спасибо! Я понял свою проблему! Очень полезно!
3. @Alex под комментариями я имел в виду комментарии в программе, а не ваш комментарий!
4. @JaysmitoMukherjee хорошо, что я это не понял
Ответ №2:
Решение
Вот обновленный код с этой логической переменной, как в упомянутом разделе комментариев.
Но вы также должны подумать, может быть, добавить блок try / catch / finally, а затем в части finally закрыть сканер (finally всегда будет вызываться)
Поскольку теперь вы выполняете цикл до тех пор, пока не получите правильное предположение, вам нужно создать случайную переменную вне цикла, иначе она будет создавать на каждой итерации новый случайный символ.
Кроме того, я избавляюсь от этих циклов управления, на самом деле большим преимуществом работы с char является то, что вы можете сравнивать значение ASCII с другими символами.
Здесь, где мы просто сравниваем символы в верхнем регистре, мы можем напрямую сравнивать эти символы друг с enteredLetter > randomLetter
другом, например.
Пример:
enteredLetter = 'A';
randomLetter = 'D';
enteredLetter > randomLetter
Это сравнение проверит значение ASCII A = 65> D = 69
ИТАК, A не больше D и переходим к следующему условию.
Также вы должны проверить правильность ввода символов, таким образом, должен быть статический метод класса character isLetter() . Также не принимайте ввод в виде строки, вместо этого принимайте ввод непосредственно как символ с char myLetter = scan.next().charAt(0);
package hall;
import java.util.Scanner;
public class GuessingGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Boolean isGuessed = false;
char[] characters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
char randomLetter = characters[(int) (Math.random() * 26)];
while (!isGuessed) {
System.out.println("Guess the Letter");
char myLetter = scan.next().charAt(0);
if(!(Character.isLetter(myLetter))) {
System.out.println("Invalid Input Try Again:");
}else {
char enteredLetter = Character.toUpperCase(myLetter);
if (enteredLetter == randomLetter) {
System.out.println("Correct Guess");
System.out.println("The letter is:" randomLetter);
isGuessed = true;
}
else if (enteredLetter > randomLetter) {
System.out.println("Incorrect Guess");
System.out.println("The letter is too high");
}
else if (enteredLetter < randomLetter) {
System.out.println(enteredLetter);
System.out.println("Incorrect Guess");
System.out.println("The letter is too low");
}
}
}
}
}