🎉

プログラミング自主学習 38日目 多次元配列/String[]/配列の複製/配列の総合/String[] args

2023/07/03に公開

多次元配列

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 

Discussion