初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第10回】初心者のJavaプログラミング【コマンドライン引数】

Stringクラスに続けて連投です。
コマンドライン引数についてです。
これが出来るようになると急に楽しくなります。コンピュータと意思疎通をしているようなそんな感覚です。

これまでJavaに関しては合計9回ほど書いてきましたが、その中に絶対main()というワードがあったと思います。
これはmain関数と呼ばれていて、プログラムはここから始まります。コンパイラがmainどこだーっていって真っ先に探しにきます。

そして、main関数にはこのような

main( String args[] )

というような引数っぽいものがいつも書かれていたと思います。みれば分かる通り、
Stringクラスの配列が引数としてきますよーという意味になります。
引数という言葉が一般的に使われますが、めっちゃ分かりにくいと思いますので、
引数=入力と頭の中で変換すると分かりやすいと思います。

とりあえずめっちゃ簡単な例です1行しかコードは書いてないですが、楽しすぎてめっちゃわくわくすると思います。

class TestSample {
  public static void main( String args[] ) {
    System.out.println(args[0]);
  }
}

これだけです。printlnのかっこの中にargs[0]と入っていると思います。ここには入力された値が入ります。
普段だったらこのjavaファイルをコンパイルして実行するには、

javac TestSample.java
これでコンパイル完了

その次に
java TestSample
コマンドプロンプトに入力していました。

ですが今回のはいつも通りやってもうまくいかないはずです。
printlnが何を表示したらいいか分からないからです。
こちらからその値を入力しなければいけません。

そしてその入力の仕方ですが、コンパイルするまではいつも通りです。
ですが、実行する時が少し違います。
java TestSample Hello
というようにします。
クラス名の後にスペースを入れて、文字を入力します。
するとその入力された文字がargs[0]に代入されて、それがprintlnによってコマンドプロンプトに表示される、
といった流れです。

たくさん入力した場合はスペースで区切っていけばいいです。

一般化すると
java クラス名 args[0] args[1] args[2] ..........
となります。

これが出来るようになると今まで一つの値でしか動かなかったプログラムがいろんな値で試せるようになります。

入力された値は文字列

入力された値は文字列であることに注意が必要です。なんで文字列かというと、
main( Strint args[] )
となっているからです。Stringは文字列のことでしたよね。

では、先ほどのプログラムでコマンドプロンプトから「123」を入力するとどうなるでしょうか。
123と表示されたはずです。なんだ文字列じゃなくて数値じゃん、と初見では思いました。ですがこれは立派な文字列です。

以下証拠です。

class TestSample {
  public static void main( String args[] ) {
    System.out.println(args[0] + args[1]);
  }
}

この時コマンドプロンプト
java TestSample 123 123
と入力するとどうなるでしょうか。

答えは
123123
です。

これは足し算されてないですよね。足し算されたら246になるはずですもんね。
これは単なる文字列の連結です。

ではどうすれば意図した結果が得られるでしょうか。

整数同士の足し算を考えることにする

じゃあ、簡単に、2と3を入力して5と返ってくるようなプログラムを作ることにしましょう。
まず、なにをするか。
まずは文字列をなんとかしなければいけない。文字列をint型に出来たら計算できるなーと思いますよね。
そんな機能がIntegerクラスというものにあるのです。

IntegerクラスはInt型をラップしたようなくらすで、ラップクラスと呼ばれています。
intの値を一つ持っていて、その他にも文字列をint型にしたり、16進数にしたりとたくさんの機能がつまったクラスです。そのクラスのメソッドを利用してまずはStringクラスの値をIntegerクラスのオブジェクトに入れてみましょう。

Integer inte1 = Integer.valueOf(args[0]);
Integer inte2 = Integer.valueOf(args[1]);

これはIntegerクラスの静的メソッドを利用して入力された文字列をIntegerクラスに変換します。これで文字列はとりあえずIntegerクラスに変換されました。

次にint型にしたいですよね。
そこで登場するのがintValue()というIntegerクラスで定義されているインスタンスメソッドです。
先ほど変換された値の入ってるinte1,inte2オブジェクトに対して、
オブジェクトの中に入っている値を整数型で返します。オブジェクトに対して使うので次のようになります

int i1 = inte1.intValue();
int i2 = inte2.intValue();

これでやっと文字列から整数を抽出することが出来ました。
これでやっと計算が出来ますね。

足し算するだけでも変換しなくちゃ行けなかったりして色々大変ですね。

完成品

class TestSample {
  public static void main( String args[] ) {
    Integer inte1 = Integer.valueOf(args[0]);
    Integer inte2 = Integer.valueOf(args[1]);
    int i1 = inte1.intValue();
    int i2 = inte2.intValue();

    System.out.println(i1 + i2);
  }
}

以上で今日は終わり。
結構書くの大変でした。

おわり