0

これは私のコードです...

class info{
    public static void main (String[]args) throws IOException{
        char gen;

        while(true) {   //problem occurs with this while
            System.out.print("\nENTER YOUR GENDER (M/F) : ");
            gen=(char)System.in.read();

            if(gen=='M' || gen=='F' || gen=='m' || gen=='f'){
                break;
            }
        }

        System.out.println("\nGENDER = "+gen);
    }
}

これは私の出力です...

ENTER YOUR GENDER (M/F) : h

ENTER YOUR GENDER (M/F) :
ENTER YOUR GENDER (M/F) :
ENTER YOUR GENDER (M/F) : m

GENDER = m

性別を何度も尋ねている理由を誰かが理解するのを手伝ってくれませんか。

4

3 に答える 3

5

あなたはおそらくWindowsで作業しています。'\r'答えを入力して Enter キーを押すと、2 つの文字とが追加されます'\n'。Fromstdinあなたは 1 文字しか受け取りませんが、余分な 2 文字はバッファに残ります。間違った答えを出すと、ループしてバッファからこれらの 2 文字を自動的に読み取ります。性別が一致しないため、ループが続きます。最善の解決策は、文字ではなく文字列を分析することです。

InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String s = in.readLine();

文字列比較equalsではなくメソッドを使用することを忘れないでください。==

于 2012-06-28T09:25:43.670 に答える
4

h;を押した後に return を押しました。そうするまでは表示されませんが次の文字が表示される前に、リターンが表示されます (そして、見た目では、おそらくと'h'の 2 つの文字として出てきます)。'\r''\n'

1 文字ではなく、一度に 1行のテキストを読みたいと思うかもしれません- いずれにせよ、ユーザーがリターンを押したときにのみ入力が表示されます。つまり、この特定の側面について心配する必要はありません。

Scannerこれ、またはBufferedReaderラッピングに使用できますSystem.in

于 2012-06-28T09:25:33.883 に答える
0

使用するScanner scan = new Scanner(System.in)

ここにあなたのコードの作業バージョンがあります....

public class Info{


        public static void main (String[]args) throws IOException{

        char gen;
            Scanner scan = new Scanner(System.in);          // Change made here

            while(true) {  

                System.out.print("\nENTER YOUR GENDER (M/F) : ");

                gen= scan.next().charAt(0);             // Change made here

                if(gen=='M' || gen=='F' || gen=='m' || gen=='f'){
                    break;
                }
                else{                                 // Change made here
                    System.out.println();
                    System.out.println("Your Option is not Available, pls try again");
                    continue;
                }
            }

            System.out.println("\nGENDER = "+gen);
        }
    }
于 2012-06-29T03:14:13.910 に答える