- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个游戏,直到用户在命令行中输入退出为止。
用户可以输入不同的命令,例如 get 和 go,使用 get 命令,用户可以说出想要什么,获取棒球棒。我在代码中所做的就是拆分命令。
一切工作正常,但我发现了一个无法解决的错误。如果我输入“get”并按 space 然后按 ctrl+z 它会进入一个永远不会结束的 while 循环。
只有 ctrl+z 才会发生(1 次使用 ctrl c 但之后 1 次没有不再)
private void run()
{
while (! quitCommand)
{
String input = null;
try
{
input = null;
System.out.println("Input "+ input);
System.out.println("Give a command.");
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
input = is.readLine();
handleCommand(input);
// As long as the command isn’t to quit:
// get the next input line and handle it. (With handleCommand.)
}
catch (Exception e)
{
System.out.println("Something went wrong we are sorry try again.");
e.printStackTrace();
}
}
}
/**
* @param userInput (This is the entire input string from the user.)
*
* (Tell others to) Perform the task which belongs to the given
* command.
*/
private void handleCommand(String userInput)
{
// Split the user input string.
if (userInput != null) // user input can not be empty
{
String[] delenTekst = userInput.split(" ");
// The first word is a command. The rest is extra information
String command = delenTekst[0];
String extra = "";
for (int i = 1; i < delenTekst.length; i ++)
{
if (i == 1)
{
extra = extra + delenTekst[i];
}
else
{
extra = extra +" " + delenTekst[i];
}
}
switch (command)
{
// Check if the command is to travel between rooms. If so, handle
case "go"
:
this.checkRoomTravel(extra);
break;
// If there isn't any room travel, then check all other command
case "get"
:
System.out.println("Looking for " +extra );
this.handleGetCommand(extra);
break;
case "quit"
:
quitCommand = true;
break;
default
:
System.out.println("Command is not known try help for information");
break;
}
}
else
{
userInput = "help";
}
}
我是java新手,所以它可能非常简单。
在我的脚本顶部,我有一个私有(private) boolean 值quitCommand = false;
,用于检查用户是否输入退出。
最佳答案
Ctrl+Z 关闭控制台,因此您的 readLine()
返回 null,假装表示已到达文件末尾。因此,您需要做的就是检查 readLine()
返回的 null
并在处理“退出”时处理它。
我更改了您的代码(只是为了测试我的论文),并且还简化了一些内容,例如您不需要在每次读取一行时重新创建一个 BufferedReader。
private boolean quitCommand = false;
private void runIt() {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
String input = null;
while(!quitCommand) {
try {
System.out.print("Give a command: ");
input = is.readLine();
// As long as the command isn’t to quit:
if(input == null || "quit".equals(input.trim())) quitCommand = true;
if(quitCommand) break;
// get the next input line and handle it. (With handleCommand.)
String[] words = input.trim().split("\\s+");
// ** This is the original handleCommand line **
System.out.println(input + ":" + Arrays.toString(words));
}
catch (Exception e) {
System.out.println("Something went wrong we are sorry try again.");
e.printStackTrace();
}
}
}
顺便说一句:要将输入拆分为单词,我将使用代码中所示的正则表达式。如果用户输入制表符或多个空格,这也适用。
关于Java bufferreader 在 ctrl z 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19467424/
我有一个可以将某些字符加粗的函数。一切工作正常,除了我在方法开始时的字符串被剪切到某处并返回一半,而不是作为开始时得到的整个字符串。这是代码,我不知道我的错误在哪里。 public String bo
我正在从输入(IDE eclipse Luna)输入行,按下回车键,光标一直向下移动,但没有输出显示。在尝试的第二种方法中,但我必须按两次 enter 才能打印输出,我该如何修复这两个错误。为什么在第
我有一个有点简单的服务器,这意味着我正在尝试通过使服务器尽可能面向对象来学习不同的设计模式。令人惊讶的是,在我创建方法 close() 之前我还没有遇到过一个问题。 很明显,当客户端关闭与数据库的连接
我正在尝试使用 BufferReader 填充二维数组,它成功填充了数组的所有行,除了最后一行之外。我尝试将循环增加一以解决该行,但出现索引越界错误。我怎样才能显示最后一行? public stati
我有这个简单的方法: private String read(String filePath) throws IOException { FileReader fileReader = new
我有一个问题正在解决。我必须使用 bufferedReader 将单词添加到树集中(并输出树集的大小),但问题是我无法通过编译器速度测试限制。文本仅包含字母和空格(可以是空行)。我必须找到一个新的解决
我使用 while 循环逐行搜索文件中的内容,直到找到字符串“MATCH”。但是当在另一个函数中我需要再次使用 BufferReader 时,它会引用文件末尾还是从文件开头开始? Public Str
我正在尝试处理我用 BufferReader 读取的 html,如下所示: try { HttpResponse response = DisplayMessageAc
是否可以为缓冲区读取器设置多个标记,以便我可以多次预读? 所以我的代码比较长,但基本思路是在设置一个我将要返回的标记之后,我提前阅读。我的代码检查此“前面”行是否满足某些条件,如果满足,它会在返回初始
全部,我正在尝试读取一个将由多个线程写入的文件,我将使用 BufferedReader 在一个线程中读取该文件。 代码如下所示。 FileReader reader = new FileReader(
java BufferReader 有一个方法 readLine 读取到 '\n' 或 '\r' 是读取然后返回行字符串。示例: InputStreamReader isr = new InputSt
使用以下代码将读取器的输出拆分为字符串,然后在构造函数中使用这些字符串。但是,当 bufferreader 到达流的末尾时,它会输出 null,这会导致构造函数中出现空指针异常。 List resul
我可以看到以下两个程序之间的性能差异巨大。 import java.io.*; import java.util.Date; class SkipProg2 { public static vo
我正在使用 java 中的 HttpURLConnection 读取一个大型 xml 文件,如下所示。 StringBuilder responseBuilder = new StringBuilde
I wrote some program that has to receive and send messages. But I have some troubles with streams
我正在尝试从文本文件中提取特定数据。我使用 bufferreader 逐行读取文件,以便我可以处理该行。 以下是我编写的代码: File CAD = new File (filename);
我正在制作一个 HTTP 服务器和 HTTP Web 客户端,用于简单的 Http 请求和响应。 这是服务器的代码 import java.io.*; import java.net.*; impor
如何使用 FileReader 而不是使用 BufferReader 我想将 File,FileReader 用于此从 ftp 读取文件的程序 public class FileReader
我是java新手,我尝试用TCP Socket编写一个简单的客户端服务器,但经过几天的努力后我遇到了麻烦,我无法解决这个问题。 我使用 BufferReader.Readline(); 得到 null
我正在制作一个游戏,直到用户在命令行中输入退出为止。 用户可以输入不同的命令,例如 get 和 go,使用 get 命令,用户可以说出想要什么,获取棒球棒。我在代码中所做的就是拆分命令。 一切工作正常
我是一名优秀的程序员,十分优秀!