我正在尝试解决onlinge法官的以下问题:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=310。
我想知道如何确定程序何时退出,换句话说,何时应该停止输入循环并退出程序?
示例代码:
public static void main(String[] args)
{
//Something here
Scanner in = new Scanner(System.in);
while(?) //How do I determine when to end?
{
//Doing my calculation
}
}
我唯一的想法是当所有输入都粘贴在控制台中时让输入阅读器停止,但我不知道我将如何做到这一点。
答案 0 :(得分:0)
您可以尝试这样的事情
Scanner in = new Scanner(System.in);
System.out.println("Your input: \n");
List<String> list=new ArrayList<>();
while(in.hasNextLine())
{
list.add(in.nextLine());
if(list.size()==5){ //this will break the loop when list size=5
break;
}
}
System.out.println(list);
你必须使用上面的技巧来打破while循环。否则循环继续运行。
我的意见:
hi
hi
hi
hi
hi
Out put:
[hi, hi, hi, hi, hi]
答案 1 :(得分:0)
确定输入是一个破坏条件。例如“退出”
那么
if(in.nextLine().equalsIgnoreCase("EXIT")){
break;
}
或者,如果不可能,就像这样
public static void main(String[] args)
{
//Something here
int i = 0
Scanner in = new Scanner(System.in);
while(in.hasNext()) //How do I determine when to end?
{
//code
i++;
if(i==3){
//Doing my calculation
break;
}
}
}
答案 2 :(得分:0)
如果输入为System.in
,我会这样做:
Scanner s = new Scanner(System.in);
int r, b, p, m;
while (true) {
b = Integer.parseInt(s.nextLine());
p = Integer.parseInt(s.nextLine());
m = Integer.parseInt(s.nextLine());
r = doYourWoodooMagic(b, p, m);
System.out.println(r);
s.nextLine(); //devour that empty line between entries
}
所以有一个问题:为什么“吞噬”那条空行后打印r?简单回答:在最后一组三个数字之后,可能根本就没有任何行,所以s.nextLine();
将永远陷入困境。
我不知道UVa Online Judge,但我做了类似的程序,在获得正确的输出后终止了你的程序,所以这个解决方案没问题,但是我再也不知道UVa Online Judge是如何工作的。
如果没有工作
如果Judge仍然给你错误,请用更复杂的代码替换s.nextLine();
:
while (true) {
// ...
if(s.hasNextLine()) {
s.nextLine(); //devour that empty line between entries
} else {
break;
}
}
然而,这预期输入以最后一个数字结束,如果在最后一个数字之后还有一个空行,则必须
while (true) {
// ...
s.nextLine(); //devour that empty line between entries
if(!s.hasNextLine()) {
break;
}
}
吃最后一个空行
答案 3 :(得分:0)
也许这会有所帮助: http://uva.onlinejudge.org/data/p100.java.html
来自Online Judge的示例Java代码,您可以自定义void Begin()并在那里进行计算