Java从控制台读取粘贴的输入然后停止

时间:2013-09-16 13:24:54

标签: java input

我正在尝试解决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
    }
}

我唯一的想法是当所有输入都粘贴在控制台中时让输入阅读器停止,但我不知道我将如何做到这一点。

4 个答案:

答案 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()并在那里进行计算