プログラムの中のmainの部分に文字列の配列があります。
public static void main( String[] args ) {
これはargsという名前の文字列の配列の宣言です。
次のように書いても同じです。
public static void main( String args[] ) {
args は変数名なので何を使ってもいいのです。人によっては 別の名前を使います。
public static void main( String[] argv ) {
この配列はコマンドライン引数を受け取るためにあります。
コマンドライン引数とは、次のようなものです。
$ java ArgTest 10 20 abc
ArgTest という java プログラムにとって、10 20 abc が引数となります。(コマンドラインという言葉は命令を1行に書いてEnterで実行させるところから来ています)この引数が、次の main の( )の中の文字列の配列に読み込まれます。
public static void main( String[] args ) {
その結果空白を区切りとして3つの要素があると判断され、次のように代入されます。
args[0] | args[1] | args[2] |
10 | 20 | abc |
/** コマンドライン引数のテスト */ public class ArgTest { public static void main( String[] args ) { System.out.println ( args[0] ); System.out.println ( args[1] ); System.out.println ( args[2] ); } }
コンパイル後実行すると次のようになります。
$ java ArgTest 10 20 abc 10 20 abc
このプログラムは args[2] を参照していますから、引数が3より少ないと実行時にエラーになります。
$ java ArgTest aaa bbb aaa bbb Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 at ArgTest.main(ArgTest.java:8)
多い場合は無視されるだけです。
コマンドラインから2人の名前を受け取って挨拶を表示するプログラムを作りなさい。
System.out.println( args[0] + "さん こんにちは" ); System.out.println( args[1] + "さん こんにちは" ); System.out.println( "あいさつがおわりました。" );
次のように表示されるようにします。
$ java Aisatsu2 鈴木 田中 鈴木さん こんにちは 田中さん こんにちは あいさつがおわりました。
実行時に引数が2つ以上ないとエラーになりますが現段階ではしかたありません。
注意 いつもの様に引数なしで実行するとエラーになります。
$ java Aisatsu2 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Aisatsu2.main(Aisatsu2.java:X)
引数を次の様に2つ以上加えなければなりません。(漢字でなくても文字であれば何でも)
$ java Aisatsu2 加藤 佐藤
2つの引数を入れて実行すると、足し算をするプログラムを作りなさい。
/** 2つの引数の和を求める */ public class Tasu { public static void main( String[] args ) { int a = Integer.parseInt( args[0] ); int b = Integer.parseInt( args[1] ); System.out.println ( a + b ); } }
コマンドライン引数は必ず文字列です。 10 は 10 でなくて、"10" なのです。もし、次のようにそのまま + で演算すると結果は足し算でなく連結になります。
System.out.println ( args[0] + args[1] );
これを数値として使用するためには、変換が必要です。次の様にします。
Integer.parseInt( args[0] )
これで、args[0] が "10" の時に、10という数値を得ることができます。このまま計算をすることもできますし,次のようにint型の変数に代入することもできます。
int a = Integer.parseInt( args[0] );
もし,doubleにする必要があるなら次のようにします。
double a = Double.parseDouble(args[0]);
コンパイル後実行すると次のようになります。
$ java Tasu 23 45 68
このプログラムも、引数が2より少ないと実行時にエラーになります。
$ java Tasu Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Tasu.main(Tasu.java:6)
2.のプログラムを改良して式も表示するようにしなさい。
$ java Tasu 23 45 23 + 45 = 68
ちょっとヒントです。まだ不足しています。
/** 2つの引数の和を求める */ public class Tasu2 { public static void main( String[] args ) { System.out.print( args[0] ); System.out.print( args[1] ); int a = Integer.parseInt( args[0] ); int b = Integer.parseInt( args[1] ); System.out.println ( a + b ); } }