0

これは私の最初の質問です。私はコンピューター サイエンスの 2 年生で、いくつかの入力を正しく読み取るのに苦労しています。コマンドラインを受け入れるボードゲームを作成しています。

問題のコードの一部は次のようになります。

ユーザーは、次のようなコマンドを入力するように求められます: create 0 0 fast flexible、または次のようになります:create 0 0整数は任意の値であり、高速または柔軟で、他のものなしで入力できます。

if((keyboard.next()).equals("create"))
{
    xValue = keyboard.nextInt();
    yValue = keyboard.nextInt();

if((keyboard.next().equals("fast")))
{
        pieceType = "FP";
        if((keyboard.next().equals("flexible")))
        {
            pieceType = "FF";
        }
    }


if((keyboard.next().equals("flexible")))
{
        pieceType = "SF";
        if((keyboard.next().equals("fast")))
        {
            pieceType = "FF";
        }
}
}

プログラムは一貫して 7 つの入力を必要とします。

ユーザーがEnterキーを押した後に入力のチェックを停止するにはどうすればよいですか?

4

3 に答える 3

1

文字列全体を空白に従って分割し、単語(または部分)ごとに文字列を順番に処理できると思います。とにかく、入力全体を慎重にアサートする必要があります。

于 2012-09-29T19:07:22.257 に答える
0

で試してみてください

String NEW_LINE_SIGN = "\n";
if (keyboard.next().contains(NEW_LINE_SIGN){ /* .... */ }
于 2012-09-29T19:07:56.277 に答える
0

これはうまくいくはずです...

Scanner kbd = new Scanner(System.in);
kbd.useDelimiter(System.getProperty("line.separator"));
//you could create a rule automatically with some kind of a rules engine
if(kbd.hasNext("create(\\s+)(\\d+)(\\s+)(\\d+)(\\s+)(fast|flexible)(\\s+)(fast|flexible)")) {
    MatchResult res = kbd.match();
    for(int i = 0; i <= res.groupCount(); ++i) {
        System.out.println(res.group(i));
        //handleRules(res.group(i), i);
    }
}
kbd.close();
于 2012-09-29T20:27:49.253 に答える