プログラミング自主学習 38日目 多次元配列/String[]/配列の複製/配列の総合/String[] args
多次元配列
int [][] scores = { { a,b,c } {d,e } };
1次元配列int scores配列はそれぞれの2次元配列int[] scores配列(アドレス)を含めている。
長さは2だ。2次元配列int scores[]配列は1次元配列int scoresにより2つが存在している。
int[0] scores(左)は{a,b,c,}の値があり、長さは3である。
int[0][0] scores = a;
int[0][1] scores = b;
int[0][2] scores = c;
int[1] scores(右)は{d,e}の値があり、長さは32ある。
int[1][0] scores = d;
int[1][1] scores = e;
new演算子を使用して生成
- 事前に長さを知ってる場合
int [][] scores = new int[2] [3];
2)2次元配列の長さが異なる場合
int [][] scores = new int[2] [];
scores[0] = new int[3]
scores[1] =new int[2]
String型の配列
基本データー型の配列はインデック(配列)に直接、値を保存できる。
しかし、Class(String)とInterface配列は、参照型変数のように、その値ではなく、アドレスを保存する。
Stringの文字列は、同じ文字列であれば、自動的に同じアドレスを参照しているが、
new演算子で生成した場合、他のヒープ領域に保存される。
配列の複製
配列は一度、生成された以上長さを変更することができない。
例えば、長さを3から5に伸ばしたい場合は、二つの手がある。
1)for文を活用し、複製することで解決する。
2)Systemのarraycopy()メソッドを活用する。
System.arraycopy(原本配列、複製を始めるインデックス、新しい配列、ペーストするインデックス、複製する長さ)
System.arraycopy(oldstrArray,0,newStrArray,0,oldStrArray.length);
この場合、OldStrArrayとNewStrArrayは異なる配列だが、同じ値を持ってるため、各配列のインデックスは同じアドレスを含め、同じオブジェクトを参照する。
OldStrArrayの値("java","array","copy") ==NewStrArrayの値("java","array","copy")
配列の総合
一つの配列の要素の総合を算出する際に、for文の条件式(カウンタ変数)と増減式になしで簡単に算出する方法がある。合計を代入する変数と配列の要素の値を代入する変数を宣言し、活用することができる。
int[] scores = {95,88,77,98,96}
int sum=0;
for(int score: scores){
sum = sum + scores //sum += scoresもok!
}
Stringタイプに使う場合は文字列を結合することが分かる。
String args[]
args[]はパラメーター(仮引数)として、アーギュメント(実引数)をインプットする際に使われる。
すべてのクラスはmainメソッドから実行され、インプットがある場合、そのインプットした実引数を入れるパラメーターが必要になるため、args[]がその引数をこめる器になる。
今は実引数がないため、演算をせずに終了されるが、eclipseでインプットのアーギュメントを入れてみたり、cmdを活用して、インプットすることもできる。
cd classfileがあるdirectory
java ch05.sec11.MainStringArrayArgument 10 20
Discussion