Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的程序要求符号2次而不是1次(忽略第一个符号)?_Java_User Input - Fatal编程技术网

Java 为什么我的程序要求符号2次而不是1次(忽略第一个符号)?

Java 为什么我的程序要求符号2次而不是1次(忽略第一个符号)?,java,user-input,Java,User Input,这是一个简单的刽子手游戏: 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[w

这是一个简单的刽子手游戏:

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');
}
我的问题是,为什么它在询问“您想猜另一个单词吗?”时会忽略第一个符号“y”


我试着用同样的do-while条件创建一些测试程序,但是他们没有像那个程序那样要求2次字符

程序要求您输入两次,因为您已经这样编程了。打印后-
“您想猜另一个单词吗?输入y或n>”
-您需要在while条件中以及
Do
之后的第一条语句中输入
input.nextLine()
,因此它要求输入两次

也许您可以将问题
在单词
中输入字母移动到内部
do
循环,而不是在
if
条件
if(asterisksInWord){
中执行该操作


另外,根据您当前的逻辑,它不会忽略您的第一个符号,即决定是否退出循环的真正符号,下一个输入实际上是您的第一个猜测。

我建议您使用chat
ch=(char)System.in.read();
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 **** >