戻る

配列の宣言

   配列はk変数の一種である。配列が普通の変数と異なる点は、
  一つの名前(変数名)で複数のデータを記憶させる事が出来る事である。
  次は、numというint型の変数を宣言している。

   int = num; ・・・・・このnumは普通の変数

   この宣言を少し変え、型名の後ろに[ ]を付けると、配列の宣言になる。

   int[ ] num; ・・・・・このnumは配列

   この場合、型名がintになっているので、numはint型のデータを(複数個)記憶する事が出来る。

インスタンスの生成

   配列は、宣言しただけではデータを記憶することができない。配列の実態を作って初めてデータを記憶させる事が出来る。
  実態を作ることをインスタンスを生成するという。配列のインスタンスを生成するには、次のようにする。

   new 型名[要素数];

   要素数というのは、記憶させるデータの個数のことである。
  例えば、int型のデータを10個記憶できる配列のインスタンスを生成するには、次のようにする。

   new int[10];

   このようにして生成した配列のインスタンスを配列に代入する。

   int[ ] num; ・・・・・・・・・numという配列を宣言
   num = new int[10]; ・・そのnumに配列のインスタンスを代入。

   これで配列numは10個のint型のデータを記憶させる事が出来るようになる。
  尚、通常は、配列の宣言とインスタンスの生成を1つの文にまとめて書く。

   int[ ] num = new int[10];

   これが、一般的な配列の宣言(とインスタンスの生成)である。次に配列宣言の書式にまとめる。

   型名[ ] 配列名 = new 型名[要素数];

配列要素の代入・参照

   配列に記憶できる個々のデータを要素という。それぞれの要素は、あたかも1つの変数のように振舞う。
  値を代入したり、参照したりすることが出来る。

   配列名 [インデックス]

   インデックスは0から順に振られる。
  例えばint[ ] num = new int[10]; のように宣言された配列numは、次の10個の要素を使うことが出来る。

   num[0] ・・・・・1番目の要素
   num[1] ・・・・・2番目の要素
   …
   num[9] ・・・・・10番目の要素

   また、double[ ] price = new double[100]; のように宣言された配列priceは、次の100個の要素を使うことが出来る。

   price[0] ・・・・・1番目の要素
   price[1] ・・・・・2番目の要素
   …
   price[99] ・・・・・190番目の要素

   一番最後の要素のインデックスは0から数える為、その配列の要素数よりも1つ小さくなることに注意。

   配列を宣言し、インスタンスを生成し、配列の各要素に値を代入し、それらの値を参照するまでの流れを示す。
  以下のサンプルは、3つの商品の価格を表示するものである。
  商品の価格を記憶させる為、priceという配列を用意する。配列要素の数(商品の数が3なので)3である。

   int[ ] price = new int[3];

   次の3つの文で、配列の各要素に初期値ーーーすなわち商品の価格を代入している。

   price[0] = 19800;
   price[1] = 12800;
   price[2] = 9800;

   最後に次の3つの文で各要素の値を表示すれば、プログラムの完成である。

   System.out.println("商品1の価格="+price[0]);
   System.out.println("商品2の価格="+price[1]);
   System.out.println("商品3の価格="+price[2]);

   サンプル:Price.java

   //
   //Price.java---配列の基本的な使い方
   //
   public class Price {
    public static void main(String[ ] args) {
     int[ ] price = new int{3}
;
     price[0]=19800;
     price[1]=12800;
     price[2]=9800;

     System.out.println("商品1の価格="+price[0]);
     System.out.println("商品2の価格="+price[1]);
     System.out.println("商品3の価格="+price[2]);
    }
   }

   実行例

   $ java Price
   商品1の価格= 19800
   商品2の価格= 12800
   商品3の価格= 9800
   $ _

   上記で示したサンプルは、配列を宣言し、インスタンスを生成し、各要素に初期値を与えるのに次の4つの文を使った。

   int[ ] price = new int[3];
   price[0] = 19800;
   price[1] = 12800;
   price[2] = 9800;

   これを次の1つの文にまとめる事が出来る。

   int[ ] price = {19800,12800,9800,};

   ここで、配列のインスタンスを生成する為のnewが使われないことに注意。
  この書式は特別で、newを使わなくても{ }の中に書いた初期値の数と同じ要素数のインスタンスが作られる。

   このように、配列の要素数が少なく、その初期値が分かっている場合は、
  次の書式を使って配列を宣言し、インスタンスを生成し、各要素に初期値を与えることが出来る。

   型名[ ] 配列名 = { 初期値1、初期値2、・・・・・・}

   以下は、この書式で先程のサンプルを書き直したものである。

   サンプル:Price_2.java

   //
   //Price_2.java---配列の宣言(その2)
   //
   public class Price_2 {
    public static void main(String[ ] args) {
     int[ ] price={19800,12800,9800};
     System.out.println("商品1の価格="+price[0]);
     System.out.println("商品2の価格="+price[1]);
     System.out.println("商品3の価格="+price[2]);
    }
   }

   実行例

   $ java Price
   商品1の価格= 19800
   商品2の価格= 12800
   商品3の価格= 9800
   $ _

   前項のサンプルと同じ結果を得ることに成功している。

配列の要素数

   配列の要素の数を取得するにはlengthを使う。

   配列名.length ・・・・・その配列の要素数

   例えば、配列priceの要素数を取得するなら次のようにする。

   price.length

   配列priceの要素数を表示するものである。

   サンプル:Arrlength.java

   //
   //Arrlength.java---配列の要素数を取得する
   //
   public class ArrLength {
    public static void main(String[ ] args) {
     int[ ] price = new int[100];
     System.out.println("配列priceの要素数="+price.length);
    }
   }

   実行例

   $ java ArrLength
   配列priceの要素数=100
   $ _

String

   全焼までで、いろいろなデータ型の変数を扱ったが、文字列を記憶する為の変数は取り上げなかった。
  これは、文字列が他のデータ型とは異なる概念だからである。

インスタンスとメモリ

   文字列は、どちらかというとデータの作られ方や変数に記憶される方法が配列に近い。
  例えば、intやdoubleなどの基本データ型は、直接その変数用のメモリに保存される。

   それに対して、配列は異なる方法で保存される。
  配列は、宣言をしただけでは、実体(インスタンス)が存在しない。newを実行することにより、初めてそのインスタンスが作られる。
  配列が記憶するのは、インスタンスそのものではなく、そのインスタンスがどこにあるか、
  (そのインスタンスが存在するメモリ上の位置 ―これをアドレスという)を記憶する。

文字列とインスタンス

   文字列も配列に似ている。文字列を記憶するには、String型の変数を使う。

   String s; ・・・・・String型の変数 s を宣言。

   これで、変数 s に文字列を記憶する事が出来る。

   S = "ABC"; ・・・・・変数 s に"ABC"を代入

   ただし、この場合、変数 s のためのメモリに文字列"ABC"が記憶されるわけではない。
  "ABC"は一種のインスタンスである。文字列リテラルは特殊なインスタンスで、newを使わないでも自動的にインスタンスが作られる。
  すなわち、"ABC"と記述すれば、自動的に"ABC"を表すインスタンスが生成される。
  s が記憶するのは、そのインスタンスのアドレスである。

String型

   以上、文字列が特殊なデータ型であることを見てきた。
  ここで、文字列(文字列インスタンスのアドレス)を記憶する為のString型の使い方をまとめておく。

   String s; ・・・・・・String型の変数 s を宣言
   s = "ABC"; ・・・・変数 s に"ABC"を代入

   通常は、この2つを次の1つにまとめて書く。

   String s = "ABC";

   以後、変数 s を"ABC"の代わりに使うことが出来る。以下がその実例のサンプルである。

   サンプル:Str.java

   //
   //Str.java---Stirng型の使い方
   //
   public class Str {
    public static void main(String[ ] args) {
     String s = "Do you talk German ?";
     System.out.println(S);
    }
   }

コマンドライン引数

   String型の配列が使えるようになると、JavaのアプリケーションでUNIXのコマンドライン引数を取得する事が出来るようになる。
  これまで、何度となく書いてきたmainメソッドの( )内に注目すると、そこにString型の配列が書かれているのがわかる。

   public static void main(String[ ] args) の(String[ ] args)の部分

   この配列argsこそが、コマンドライン引数を取得する鍵となる。例えば、Javaのアプリケーションを次のようにして実行したとする。

   $ java アプリケーション名 引数1 引数2 引数3 ・・・・・

   すると、配列argsの各要素に指定された引数の値が、次のように代入される。

   args[0] ・・・・・引数1
   args[1] ・・・・・引数2
   args[2] ・・・・・引数3
   …
   …

   したがって、args[0]を参照すれば引数1の値が分かるし、args[1]を参照すれば引数2の値が分かる。
  次に、コマンドライン引数で指定された3つの引数を表示するサンプルアプリケージョンを示す。

   //
   //Cmdlin.java---コマンドライン引数
   //
   public class Cmdlin {
    public static void main(String[ ] args) {
     System.outprintln("第1引数="+args[0]);
     System.out.println("第2引数="+args[1]);
     System.out.println("第3引数="+args[2]);
    }
   }

   実行例

   $ java Cmdlin one two three
   第1引数= one
   第2引数= two
   第3引数= three
   $ _

   コマンドライン引数は、String型配列の要素として、取得されるので、String型である。
  ところが、そのコマンド引数を使って演算を行いたい時がある。その場合は、String型を数値型に変換する必要がある。
  String型、あるいは文字列リテラルをint型に変換するには、次のようにする。

   Integer.perseInt(文字列);

   したがって次のようにすれば、コマンドライン引数で指定された第1引数をint型の変数 n に代入する事が出来る。

   int n = Integer.perseInt(args[0]);

   また、String型、あるいは文字列リテラルをdouble型に変換するには次のようにする。

   double d = Double.parseDouble(文字列);

   したがって、次のようにすればコマンドライン引数で指定された第2引数をdouble型の変数 d にお代入する事が出来る。

   double d = Double.parseDouble(args[1])

   次のサンプルアプリケーションは、以上の事をテストする為のものである。
  コマンドラインで指定された第1引数(整数)と第2引数(浮動小数点)の積を計算する。

   サンプル:CmdPlus.java

   //
   //CmdPlus.java---コマンドライン引数を数値に変換
   //
   public class CmdPlus {
    public static void main (String[ ] args) {
     int n = Integer.perseint(args[0]);
     System.out.println("第1引数="+n);

     double d = Double.perseDouble(args[1]);
     System.out.println("第2引数="+d);

     System.out.println(n+"×"+d+"=";n*d);
    }
   }

   実行例

   $ java CmdPlus 9800 .75 ・・・・・9800の2割5分引きを計算する
   第1引数= 9800
   第2引数= 0.75
   9800×0.75=7350.0
   $ _

次へ