1

私は現在、オンラインジャッジで次の問題を解決しようとしています: 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

入力が次の場合、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
}

では、1 つの質問: r を印刷した後に、なぜその空の行を「むさぼり食う」のでしょうか。簡単な答え: 3 つの数字の最後のセットの後は、おそらく行がまったくないため、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;
    }
}

ただし、これは入力が最後の番号で終わることを期待しています。最後の番号の後にもう1行空行がある場合は、

while (true) {
    // ...

    s.nextLine(); //devour that empty line between entries
    if(!s.hasNextLine()) {
        break;
    }
}

最後の空行を食べる

于 2013-09-16T13:46:59.803 に答える
0

遮断条件となる入力を決定します。
例: " EXIT "

  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 に答える