戻る
配列の宣言
配列は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
$ _
次へ