0

这是我的第一个问题。我是二年级计算机科学专业的学生,​​我在正确读取多个输入时遇到了一些麻烦。我正在创建一个接受一行命令的棋盘游戏。

这是一些问题代码的样子:

要求用户输入类似这样的命令: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 个输入。

如何让它在用户按下回车后停止检查输入?

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 回答