• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Online judgeのデータ入力について)

Online judgeのデータ入力について

このQ&Aのポイント
  • Aizu Online Judgeの問題で、入力データの数が明らかでない場合の入力方法について教えてください。
  • 使用言語はJavaで、通常はScannerクラスのnextInt()を使用して入力を行っていますが、最後のデータを読み込んだ後もまだ入力待ちの状態になってしまいます。
  • 他の質問でも似たような問題があったようですが、それはJava以外の言語での解決方法でした。分かる方は教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

Windowsのコマンドプロンプトなら、^Zを入力。 Mac/UNIXのターミナルからなら、^Dを入力。 あるいは0バイトのファイルをリダイレクト入力するでも可。

devicer321
質問者

補足

コマンドプロンプトでは確かに[ctrl]+[z]で思ったとおりの結果が出ました。 また、コマンドプロンプト上では止められなかったのですが、 一つ前の回答でいただいたNoSuchElementExceptionと例外処理の導入によって ためしに提出してみたら 問題でacceptedをいただきました。 助けていただき本当にありがとうございました。 これからも頑張っていきたいとおもいます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

Digit Numberの問題には、「The input terminates with EOF」って書いてあるので、例外NoSuchElementExceptionを補足すればよいかと。 そういう質問じゃなくて、「EOFって何?」ということなら、こんなのとか: http://www.google.co.jp/search?hl=ja&q=EOF%E3%81%A8%E3%81%AF+%5EZ+%5ED&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=

devicer321
質問者

補足

何度もすみません。 EOFについては質問する前に調べていたのですが、それまでは知りませんでした(NoSuchについても) ソースコードが誤っているのかもしれませんが、 下記のテストプログラムを作って試しても、 何も数値を与えずにEnterを押しただけではプログラムが入力待ちのままになってしまいます。 import java.util.Scanner; import java.util.NoSuchElementException; class ExTest{ public static void main(String[] args){ Scanner scan=new Scanner(System.in); int i=0; try{ System.out.print("入力する数字:"); i=scan.nextInt(); System.out.println(i); }catch(NoSuchElementException e){ System.out.println("なにも入力されませんでした"+e); } } } このプログラムが、 なにも値を与えずにEnterのみを押して”なにも入力されませんでした"+NoSuchElementException” のように返ってきて終了するようになれば、おそらくこの問題も解けると思うのですが…。 どこかソースに指摘されるところがあればよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
  • covachan
  • ベストアンサー率38% (46/120)
回答No.1

質問がわかりにくいのですが、 単純に、終了したければ負の数を投げてやれば終わりませんか?

devicer321
質問者

補足

すみません。 条件では負の数がどちらか与えられたかというものにしているのですが、 実際には負の数が与えられることは無いと思います(あったとしたら例外となって止まる) なので正しいプログラムはwhileの中のどちらか負の数が与えられたらという条件は要らないとおもいます。止め方が分からないので今のところこのようになっているということです。 質問を訂正すると、この問題のように入力されるデータの行数が決まっていない場合 最後の行までデータを読み込んだ後に終了するプログラムを JavaのScannerクラスのnextInt等でどのように記述すればよいのかということです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaでのアッカーマン関数

     今アルゴリズムの勉強をしていてkupc(2012:practice)のサイトにあったアッカーマン関数の問題を見てプログラムを作りました。  下記が出来上がったものです。(m,n)=(2,3)であれば出力できましたが、入力例の2としてあった(3,45)はjava.lang.StackOverflowErrorとなりました。  bigintegerや例外処理できないか考えていますがここから進めないので何か方法があれば教えてほしいです。 import java.util.Scanner; public class AckermannExec { public static void main(String[] args) { Scanner scan=new Scanner(System.in); System.out.print("[m]>"); long m=scan.nextInt(); System.out.print("[n]>"); long n=scan.nextInt(); long a=Ackermann(m,n); System.out.println("A(m,n)="+a); } public static long Ackermann(long m,long n){ if(m>=1&&n>=1){ return Ackermann(m-1,Ackermann(m,n-1)); }else if(n==0){ return Ackermann(m-1,1); }else{ return n+1; } } } よろしくお願いします。

    • ベストアンサー
    • Java
  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • 教科書に載っていた、Javaのプログラムなのですがなぜかコンパイルでき

    教科書に載っていた、Javaのプログラムなのですがなぜかコンパイルできません。 import java.until.Scanner; class ScanInteger{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.print("整数値:"); int x = scan.nextInt(); System.out.println(x + "と入力しましたね。"); } } エラーの内容としては、ScannerクラスのSに何か原因があると言うようなものが出ます。 よろしくお願いします。

  • javaに関する質問

    n個の整数値を入力し、それらの値を昇順に並べ替えるプログラムを書いたのですがエラーにより問題が発生しました。 問題は下記の実行例のように数字を,で区切り入力すると、エラーが発生し結果が表示されないという問題です。(Enterで改行するように区切ればエラーなく実行されます) 実行例として 整数値を入力してください。 1,5,7,3 ← 手入力部分 1,3,5,7 ← 実行結果 となれば正解のようです。 これが僕の書いたコードです。 package jp.javadrive; import java.util.Arrays; import java.util.Scanner; public class Java { public static void main(String[] args) { System.out.println("整数値を入力してください。"); @SuppressWarnings("resource") Scanner a = new Scanner(System.in); @SuppressWarnings("resource") Scanner b = new Scanner(System.in); @SuppressWarnings("resource") Scanner c = new Scanner(System.in); @SuppressWarnings("resource") Scanner d = new Scanner(System.in); int a1 = a.nextInt(); int b1 = b.nextInt(); int c1 = c.nextInt(); int d1 = d.nextInt(); int[] arr = new int[]{a1,b1,c1,d1}; Arrays.sort(arr); for(int i = 0;i < arr.length;i++) System.out.print(arr[i]); } } 初めてjavaを触った為、ググりながら書いていたので仕組みを分かっていないところがあるので、間違っている箇所があればどしどしご指摘お願いします。

    • ベストアンサー
    • Java
  • プログラムが動いてくれません。

    下記のコードなのですが、6行目の「Scanner s = new Scanner(System.in);」に 問題があるみたいです。 はじめに100と入力して、次にxと入力してみたいです。 エクリプス4.2を使っています。引数を入れる場合、 メニュー欄の実行(R)→実行構成(N)→引数タブ→プログラムの引数(A)に 入力すればいいのですよね? よろしくお願い致します。 package chapter12; import java.util.Scanner; class Sample12_1 { public static void main(String[] args) { Scanner s = new Scanner(System.in); int i; while(true){ if(!s.hasNextInt()) break; i = s.nextInt(); System.out.println("input was " + i); } } }

    • ベストアンサー
    • Java
  • 3つの値の中間値を求める

    import java.util.Scanner; //このコードをどう修正したらいいですか? class Sample7_3{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数a:");int a = std.nextInt(); System.out.print("整数b:");int b = std.nextInt(); System.out.print("整数c:");int c = std.nextInt(); int med = 0; if(a<b) else if(a<c)med = c; else if(b<c)med = b; System.out.println("中間値は"+med+"です。"); } }

  • 論理演算子”||”またはの入力方法

    私はjavaを勉強中の初心者です。if文で論理演算子のまたは”||”はどのように入力すればよいか分かりません。わたしはshiftキーと¥を同時に押してその後変換して、または”||”を作っていますが赤い波線になってしまいます。私は英語タイプのキーボードを使用しています。作成した式や文は間違っていないと思いますが、構成ミスでエラーになっている可能性があるといけないので合わせて添付します。どなたか宜しくお願いいます。 import java.util.*; public class practise { public static void main(String[] args){ Scanner input=new Scanner(System.in); System.out.print("数学の成績入力:"); int score1=input.nextInt(); System.out.print("英語の成績入力:"); int score2=input.nextInt(); if (score1>90 && score2>80) ∥ (score1==100 && score2>70){ System.out.print("\n先生:良くできました!!"); } } }

  • Javaで先頭の0を含め整数の桁数を取得したい

    Javaで整数の桁数を取得したいのですが、 Scanner ids = new Scanner(System.in); int i = ids.nextInt(); String s = String.valueOf(i); int keta = s.length(); こうした場合に 12345678 と入力すれば8が取得できるのですが、 09876543 と入力したときに7と取得してしまいます。 先頭の0を無視せずに取得するにはどうすればよいでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • ランダムで月を生成し、その月を英語で入力する

    import java.util.Scanner; import java.util.Random; class test8{ public static void main(String[] args){ Scanner stdIn=new Scanner(System.in); Random rand =new Random(); String[] s1={"January","February","March","April","May","June","July","August","September","October","November","December"}; System.out.println("英語の月名を入力してください。\nなお、先頭は大文字で、2文字目以降は小文字とします。"); int n,t; do{ n=rand.nextInt(12); //nは0~11の乱数 boolean y=false; while(y==false){ System.out.print(n+1+"月:"); String s2=stdIn.next(); if(s1[n].equals(s2)){ y=true; }else{ System.out.println("違います。"); } } System.out.print("正解です。もう一度? 1…Yes, 2…No:"); t=stdIn.nextInt(); }while(t==1); System.out.println("終了です。"); } } これは正しいプログラムなのですが、 String s2=stdIn.next(); の next() の部分を nextLine() に変えると、 [実行例] 英語の月日を入力してください。 なお、先頭は大文字で、2文字目以降は小文字とします。 11月:November 正解です。もう一度? 1…Yes, 2…No: 1 2月:違います 2月: という風に、なぜか 2月:違います という一文が無駄に表示されてしまいます。 なぜなんでしょうか。。

    • ベストアンサー
    • Java
  • javaで入力した数字の順番を記憶させたい

    javaで、バブルソートにより、入力した数字を小さい順に並べるプログラムを作りたいです。次のようなものです。 数をいくつ入力しますか? 5 1番目の数:4 2番目の数:3 3番目の数:2 4番目の数:1 5番目の数:5 1番目の数: 1 (元4番目の数) 2番目の数: 2 (元3番目の数) 3番目の数: 3 (元2番目の数) 4番目の数: 4 (元1番目の数) 5番目の数: 5 (元5番目の数) その際に、もともとそれが何番目に入力された数だったかということも表示させたいのですが、その方法が分かりません。 元の数字の順番を記憶させればいいのだと思うのですが、どのようにプログラムを組めばいいのでしょうか?教えてくださると嬉しいです。 ちなみに数字を小さい順に並べるプログラムは次のようになりました。 import java.util.Scanner; public class Test { public static void main(String args[]){ int item[]=new int [100]; int a, b, t; int count; Scanner sc = new Scanner(System.in); System.out.print("数をいくつ入力しますか?"); count=sc.nextInt(); for(a=0;a<count;a++){ System.out.print(a+1+"番目の数:"); item[a]=sc.nextInt(); } System.out.println(); for(a=1;a<count;++a) for(b=count-1;b>=a;--b){ if(item[b-1]>item[b]){ t=item[b-1]; item[b-1]=item[b]; item[b]=t; } } for(t=0;t<count;t++) System.out.println(t+1+"番目の数:"+item[t]); } }

    • ベストアンサー
    • Java