反复使用System.in.read()

时间:2016-05-12 20:08:56

标签: java

编程新手,我正试图创建一个"猜字母"游戏。这个想法是第一个人按下一个键,然后第二个人按下一个键,看看她是否猜对了。

这是我的代码:

package bookExamples;

public class GuessTheLetterGame {

    public static void main(String[] args) throws java.io.IOException{
            char answer;
            System.out.print("press a key and press ENTER:");
            answer= (char) System.in.read();
            char guess;
            System.out.print("Have a guess and press ENTER: ");
            guess = (char) System.in.read();
            if (guess == answer)
                    System.out.println("**Right**");

    }

}

它运行正常,直到第34行;猜猜并按ENTER:",然后我再次按一个键,代码没有反应。

提前谢谢你:)

4 个答案:

答案 0 :(得分:1)

通过将System.in.read()强制转换为char,您将从系统转换为UTF-16的字节。因此String answer = "A"; Scanner scanner = new Scanner(System.in); String guess = ""; while(! answer.equalsIgnoreCase(guess)) { guess = scanner.nextLine(); } System.out.println("CONGRATULATIONS YOU WON!"); 仅适用于非常有限的输入。
我建议使用扫描仪读取整行。

{{1}}

答案 1 :(得分:0)

这是另一个匹配原始代码意图但提供Scanner和while循环直到匹配的

<span
  id="dropdown-info"
  ng-init= "myVar='images/info_icon_off.png'" 
  ng-mouseover="myVar='images/info_icon_on.png'" 
  ng-mouseout="myVar='images/info_icon_off.png'"
  ng-click="doSomething()">
    <img class="info-icon" ng-src="{{myVar}}" alt="Information" width="10" height="10">
</span>

答案 2 :(得分:0)

我也在学习Java,并希望有一种方法使用我知道的命令使该程序正常工作(扫描仪更高级)。

如Pshemo和Andreas所述,System.in缓冲区中仍然有一个“换行符”(ASCII 10)(假定仅输入了一个字符作为“ answer”)。

通过“读取”该字符将清空缓冲区,并在下次使用System.in.read()时,它将按预期方式输入一个条目。我添加了“ linFed”来清除它。

package BookExamples;

public class GuessTheLetterGame {

public static void main(String[] args) throws java.io.IOException{ char answer; System.out.print("press a key and press ENTER:"); answer= (char) System.in.read(); char linFed; linFed= (char) System.in.read(); char guess; System.out.print("Have a guess and press ENTER: "); guess = (char) System.in.read(); if (guess == answer) System.out.println("**Right**"); }}

答案 3 :(得分:-1)

在你的代码中没有循环来继续猜测。这只是一次性交易。要继续猜测,您需要重复部分代码。

package bookExamples;

public class GuessTheLetterGame {

    public static void main(String[] args) throws java.io.IOException{
        char answer;
        answer= 'A';
        char guess = '\0';

        Scanner scanner = new Scanner(System.in);

        while(answer != guess) {
            System.out.print("Have a guess and press ENTER: ");
            guess = scanner.next().charAt(0);

            System.out.println(guess);
        }

        System.out.println("**Right**");
}

如果你继续猜测,直到答案是正确的,你就不再需要if语句了。保持格式正确的唯一方法是向用户显示他们的猜测并开始换行。

注意:更改代码以使用扫描仪,并scanner.next()一次获取一个字符。