将打印输出保留在Linux终端中,直到它读取输入

时间:2016-06-11 23:39:56

标签: java linux infinite-loop

我是Java和面向对象编程的新手。假设我创建了一个二维数组游戏网格并使用字符初始化数组,如下所示:

+++++
+...+
+++++

我想用 123 更新 ... 。 我有以下代码:

while (true) {
    if (....) map.printMap();   //what should be the condition here??
    else ...dosomethingelse...;
}

我的问题是,是否存在一种方法可以放在 if 条件下,以便网格在输入1之前自己保持打印?如果它检测到输入1,它将在此时停止打印,执行 else 条件更新网格,然后按如下方式打印出来:

+++++
+1..+
+++++

之后,它继续在屏幕上继续打印更新的网格,并遵循上述相同的模式,直到所有 ... 更新。

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

我会使用两个线程:

  • 线程1定期(?)更新屏幕,直到设置了标志。
  • 线程2使用控制台输入上的阻塞读取来获取用户的输入,然后在适当时设置标志。

您也可以通过调用available()方法尝试执行此操作,但该方法的指定语义是难以(不可能?)以便携式使用它;即,不依赖于控制台输入堆栈的行为,这可能因操作系统而异。

答案 1 :(得分:0)

您可以尝试以下内容:

try {
    InputStreamReader reader = new InputStreamReader(System.in);
    BufferedReader buf = new BufferedReader(reader);
    while (true) {
        map.printMap();
        if(!reader.ready()) {
            Thread.sleep(1000);
            continue;
        }
        String command = buf.readLine();
        System.out.println("Command: " + command);
    }
} catch(Exception e ){ 
    e.printStackTrace();
}