1

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

4 回答 4

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;
    }
}

}

于 2013-09-16T13:43:08.193 回答
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;
    }
}

吃掉最后一个空行

于 2013-09-16T13:46:59.803 回答
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 循环。否则while循环继续运行。

我的输入:

hi
hi
hi
hi
hi

输出:

[hi, hi, hi, hi, hi]
于 2013-09-16T13:28:52.327 回答
0

也许这会有所帮助: http ://uva.onlinejudge.org/data/p100.java.html

它是来自 Online Judge 的示例 Java 代码,您可以自定义 void Begin() 并在那里进行计算

于 2013-09-16T13:48:04.507 回答