为什么我的程序要求一个符号 2 次而不是一次(忽略第一个符号)?
Why does my program ask for a symbol 2 times instead of one(ignores first symbol)?
这是简单的刽子手游戏:
public static void main(String[] args) {
String[] words = {"writer", "that", "program"};
int wordNumber = (int) (Math.random() * words.length);
System.out.print("Enter a letter in word ");
for (int i = 0; i < words[wordNumber].length(); i++)
System.out.print('*');
System.out.print(" > ");
Scanner input = new Scanner(System.in);
char letter;
do {
letter = input.nextLine().charAt(0);
boolean asterisksInWord = false;
String[] discoveredElements = new String[words[wordNumber].length()];
int countOfTries = 0;
int arrayCount = 0;
int asteriskCount = 0;
System.out.print("Enter a letter in word ");
do {
asterisksInWord = false;
boolean contain;
if (asteriskCount != 1) {
asteriskCount = 0;
for (char item : words[wordNumber].toCharArray()) {
contain = Arrays.asList(discoveredElements).contains(String.valueOf(item));
if (contain) {
System.out.print(item);
} else if (item == letter) {
System.out.print(item);
discoveredElements[arrayCount] = String.valueOf(item);
arrayCount++;
} else {
System.out.print('*');
asterisksInWord = true;
asteriskCount++;
}
}
}
if (asterisksInWord) {
System.out.print(" > ");
letter = input.nextLine().charAt(0);
if (asteriskCount != 1)
System.out.print("Enter a letter in word ");
} else
System.out.println("The word is " + words[wordNumber] +
" You missed " + (countOfTries + 2 - words[wordNumber].length()) + " time(s)");
countOfTries++;
} while (asterisksInWord);
System.out.print("Do you want to guess another word? Enter y or n >");
} while (input.nextLine().charAt(0) == 'y');
}
它的 运行 的日志是
Enter a letter in word **** > t
Enter a letter in word t**t > h
Enter a letter in word th*t > a
The word is that You missed 0 time(s)
Do you want to guess another word? Enter y or n >y
y
Enter a letter in word **** >
我的问题是为什么它在询问 "Do you want to guess another word?" 时忽略第一个符号 'y'。
我试图创建一些具有相同的 do-while 条件的测试程序,但它们不像那个程序那样要求字符 2 次。
该程序要求您输入两次,因为您已将其编程为那样。打印后 - "Do you want to guess another word? Enter y or n >"
- 你在 while 条件内执行 input.nextLine()
以及 do
之后的第一条语句,因此它要求输入两次。
也许您可以将问题 Enter the letter in the word
移动到内部 do
循环,而不是在 if
条件 if (asterisksInWord) {
中这样做。
另外,按照你现在的逻辑,它并没有忽略你的第一个符号,也就是真正决定是否退出循环的符号,下一个输入实际上是你的第一个猜测。
这是简单的刽子手游戏:
public static void main(String[] args) {
String[] words = {"writer", "that", "program"};
int wordNumber = (int) (Math.random() * words.length);
System.out.print("Enter a letter in word ");
for (int i = 0; i < words[wordNumber].length(); i++)
System.out.print('*');
System.out.print(" > ");
Scanner input = new Scanner(System.in);
char letter;
do {
letter = input.nextLine().charAt(0);
boolean asterisksInWord = false;
String[] discoveredElements = new String[words[wordNumber].length()];
int countOfTries = 0;
int arrayCount = 0;
int asteriskCount = 0;
System.out.print("Enter a letter in word ");
do {
asterisksInWord = false;
boolean contain;
if (asteriskCount != 1) {
asteriskCount = 0;
for (char item : words[wordNumber].toCharArray()) {
contain = Arrays.asList(discoveredElements).contains(String.valueOf(item));
if (contain) {
System.out.print(item);
} else if (item == letter) {
System.out.print(item);
discoveredElements[arrayCount] = String.valueOf(item);
arrayCount++;
} else {
System.out.print('*');
asterisksInWord = true;
asteriskCount++;
}
}
}
if (asterisksInWord) {
System.out.print(" > ");
letter = input.nextLine().charAt(0);
if (asteriskCount != 1)
System.out.print("Enter a letter in word ");
} else
System.out.println("The word is " + words[wordNumber] +
" You missed " + (countOfTries + 2 - words[wordNumber].length()) + " time(s)");
countOfTries++;
} while (asterisksInWord);
System.out.print("Do you want to guess another word? Enter y or n >");
} while (input.nextLine().charAt(0) == 'y');
}
它的 运行 的日志是
Enter a letter in word **** > t
Enter a letter in word t**t > h
Enter a letter in word th*t > a
The word is that You missed 0 time(s)
Do you want to guess another word? Enter y or n >y
y
Enter a letter in word **** >
我的问题是为什么它在询问 "Do you want to guess another word?" 时忽略第一个符号 'y'。
我试图创建一些具有相同的 do-while 条件的测试程序,但它们不像那个程序那样要求字符 2 次。
该程序要求您输入两次,因为您已将其编程为那样。打印后 - "Do you want to guess another word? Enter y or n >"
- 你在 while 条件内执行 input.nextLine()
以及 do
之后的第一条语句,因此它要求输入两次。
也许您可以将问题 Enter the letter in the word
移动到内部 do
循环,而不是在 if
条件 if (asterisksInWord) {
中这样做。
另外,按照你现在的逻辑,它并没有忽略你的第一个符号,也就是真正决定是否退出循环的符号,下一个输入实际上是你的第一个猜测。