• ベストアンサー

args[ ] について

次の問題についての質問です。 問題: (1)実行時に引数をつけて実行 (2)「引数と同じ値を入力してください」と表示、標準出力を行う。 (3)標準入力された値が、実行時の引数と同じ値だった場合は「正解」と表示 (4)標準入力された値が、実行時の引数と違う値だった場合は「はずれ」と表示 出力結果: C:\>java Hantei test 引数と同じ値を入力して下さい。 test 正解 C:\>java Hantei test 引数と同じ値を入力して下さい。 abc はずれ C:\> 解答例: import java.io.*; class Hantei { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("引数と同じ値を入力してください。"); String str = br.readLine(); if(str.equals(args[0])){ System.out.println("正解"); } else{ System.out.println("はずれ"); } } } ************************************************************* この解答例の中の str.equals(args[0]) の部分の意味が分からないので(特にargs[0]が)、 解説していただけたらと思います。 参考書やネットで検索してみたのですが、あまり 載っていなかったので・・・ あと、解答通りに入力したはずなのに ArrayIndexOutOfBoundsExceptionのエラーが出てしまうのは 何故なんでしょう?ちなみにエラーの意味は分かります。 配列要素数を5とかに増やして実行してみたのですが、 それでもダメでした。

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

  • ベストアンサー
  • iCarrot
  • ベストアンサー率61% (36/59)
回答No.2

args配列には引数が格納されます。 問題にある C:\>java Hantei test の場合、testが引数になります。 引数は1番目から順番にargs[0],args[1]...へと格納されます。 str.equals(args[0]) の場合、1番目の引数である"test"がstrと等しいかどうかで真偽が決まります。

noname#205525
質問者

お礼

ありがとうございました。 お陰様で解決しました!

その他の回答 (2)

  • auty
  • ベストアンサー率58% (284/486)
回答No.3

>>> 配列要素数を5とかに増やして実行してみたのです args[]の要素数は、増やすことは出来ません。与えられるものです。 [実行時の引数]とは、たとえば C:\>java Hantei test ABC 100 200 と実行したとき test ABC 100 200 の部分を指します。このとき、javaのシステム(vm)は、このプログラムに対して 配列 {"test", "ABC", "100", "200"} として与えてくれます。これが、 public static void main(String[] args) と記述することによって、配列args に入ります。したがってこれは、 String args = {"test", "ABC", "100", "200"}; と同じようなことになります。この場合も1番目の引数 args[0]に 文字列"test" が入ります。したがって str.equals(args[0]) は、入力された文字が、実行時の1番目の引数と等しいかどうかと言う事になります。 C:\>java Hantei と実行したときは、引数がありませんから、配列は空っぽです。だから args[0] は、使えません。(ArrayIndexOutOfBoundsExceptionのエラー) このときに、エラーの出ないサンプルを示します。 以下のコードを参考にしてみてください。 ------------------------------------------------------------ import java.io.*; class Hantei2 { public static void main(String[] args) throws IOException { if (args.length<1) { System.out.println("[実行時の引数]を与えてください。"); System.out.println("[例] java Hantei2 test"); return; } BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("引数と同じ値を入力してください。"); String str = br.readLine(); if (str.equals(args[0])) { System.out.println("正解"); } else { System.out.println("はずれ"); } } }

noname#205525
質問者

お礼

大変参考になりました、ありがとうございます! なのに・・・質問を締め切った後に読んだものですから、 ポイントを付与できずの申し訳ありませんでした。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>参考書やネットで検索してみたのですが、あまり >載っていなかったので・・・ Java args でググるんだ。

関連するQ&A