본문 바로가기

IT自主学習 (2023.05.23~)/Java(2023.05.23~)

プログラミング自主学習 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演算子を使用して生成

1) 事前に長さを知ってる場合

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