Java问题:
我想从用户那里获取一定数量的输入行。例如,我希望用户继续输入人名作为字符串,直到用户没有其他名字输入。我想要一种用户友好的方式来轻松指示用户没有更多输入。循环可能如下所示。有什么好主意吗?任何有关改进代码片段的提示也会受到赞赏。
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
while( <user still has more input> ) {
System.out.println("Enter name: ");
String s = read.readLine();
...
<do something with s>;
...
}
谢谢你!
答案 0 :(得分:2)
您需要一个不是名称但不再显示数据的值。空行会很好。您还想查询他们是否真的想要退出,因此如果他们意外地返回,他们并没有丢失所有数据。
name = read.readLine();
Pattern p = Pattern.compile("^\\s$"); //empty line or one of just space chareacters
if (p.matcher(name).matches()) {
System.out.println("Are you done?[y/n]");
if (Pattern.matches("[yY]", read.readLine()) {
//quit your loop
}
}
答案 1 :(得分:0)
一种简单的方法是让用户在完成后输入空行。您只需检查是line.equals("")
还是之前修剪它。
答案 2 :(得分:0)
您可以拥有一个布尔变量,例如finished
,并检查用户是否输入'Q'
或其他项目以表明它们已完成。如果是这样,请将finished
设置为true
,然后在下一次迭代时退出循环。
这是一个简单的例子,
boolean finished = false;
String name = null; // initialized to a default value.
System.out.println("Enter 'Q' to quit");
while(!finished) {
System.out.println("Enter name: ");
name = read.readLine(); // moved declaration outside of loop
if(name.equals("Q")) {
finished = true;
}
// do work with name
}
我还修改了你的代码,
s
重命名为更有意义的内容,因为您正在存储用户的名称将其更改为name
似乎是合理的。 name
变量分配给null
。并非完全必要,但我认为这是一种很好的做法。name
分配了默认值,因此我已将其移至您的循环之外。