未分類

配列の応用

投稿日:

配列の要素数を調べるコードを記述します。配列の要素数(ハコの数)は、配列の長さ(大きさ)と呼ばれています。

Javaでは、配列要素に.(ピリオド)をはさんでlengthと記述すると、配列の要素数をあらわすことができるのです。たとえば、testがさす配列については、次のようにして要素数を調べることができます。

test.length  testがさす配列要素の数をあらわします

配列要素の数を知ることができると、コードの記述が楽になります。これまでは配列の長さである「5」を繰り返し文の中に指定してきました。

しかし、異なる冒険に出るたびにコードを、新しく作成しなければならなくなった場合はどうすればいいでしょうか?「5」という数字を、新しいパーティーの人数に訂正しなければなりません。

こんなときコードの繰り返し文の中で、.lengthを利用しておくと便利です。

Sample7_06_7の7行目をfor(int i=0; test.length; i++){にしておけば、パーティーの人数が違う冒険についてコードを書くことになっても、繰り返し条件を変更する必要がありません。

配列の内容をソートする

さて今度は配列を使って、キャラクターの体力を並べ替えることにします。値を順番に並び替えることを、ソート(sort)といいます。配列は要素に複数の値を格納することができるので、並べ替えをするコードに利用すると便利です。

①まず最初に、配列の各体力を配列の先頭の体力(test[0])と比較していきます。比較した体力の方が大きい場合は、先頭の体力と入れ替えます。すると、配列の先頭の体力に最大値を格納できます。

  • 22 80 57 60 50  test[t]とtest[0]を比較して入れ替える。
  • 80 22 57 60 50  test[t]のほうが大きい場合に入れ替える。
  • 80 22 57 60 50  つまり、test[t]>test[s](s=0)のときに入れ替える。

②これで、一番大きな値である配列の先頭の体力が決まりました。そこで残りの要素についても同じ処理を繰り返します。つまり、残りの体力を配列の2番目の体力(test[1])と比較して、大きい場合に入れ替えます。すると、最終的に2番目に大きい数値が2番目の体力となります。

  • 80 22 57 60 50  test[t]とtest[1]を比較して入れ替える。
  • 80 57 22 60 50  test[t]の方が大きい場合に入れ替える。
  • 80 60 22 57 50  つまり、test[t]>test[s](s=1)のときに入れ替える。

③順に繰り返すと、配列のソートが完了します。

80 60 57 50 22

体力を入れ替えるためには、入れ替えるものと同じ型の作業用のエリア(変数)が必要です。そのため作業用の変数tmpを使っています。

多次元配列のしくみを知る

Javaでは、「配列の要素をさらに配列とする」ことで、2次元以上にハコが並んだイメージをもつ多次元配列を作ることもできます。

2次元配列を準備するコードをみてください。

  • int[][] test;        ①2次元配列の宣言です
  • test = new int[2][5];   ②配列要素を確保

2次元配列の宣言は、①のようになります。そして、int型の値を2×5=10個、記憶するには、②のように要素を確保します。

先ほどの5人分の「体力」「魔力」という2つの項目を整理してみましょう。

このコードでは、test「0」「●」に体力を、test[1][●]に魔力を格納することにしました。これを、for文で出力しています。

多次元配列の書き方

2次元配列もいろいろな書きあらわし方ができます。配列の宣言と要素の確保を同時に行う文を記述します。

int[][] test = new int[2][5];  1つの文で2次元配列を準備

また、宣言・要素の確保時に値を代入して初期化することもできます。多次元配列の場合には、{}をさらにネストして記述します。

int[][] test = {{80,60,22,50,75},{90,55,68,72,58}}; 2次元配列を初期化

Sample7_07_10のコードを書き換えたものです。なお、Javaの多次元配列では、各要素の数がそろっている必要はありません。

int[][] test = {{80,60,22,50},{90,55,68,72},{33,75,63}}; いびつな配列もつくれます

test.lengthは、この配列の全体の長さを意味します。さらに、各配列要素がいくつの配列要素をもつかを調べるには、

test[添字].length

と記述します。上のコードでは繰り返し文の処理が3回繰り返され、各要素の配列の長さが出力されているのがわかります。

-未分類

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

サンプルイメージ

練習問題(メソッド)

練習8-1 下記の2つのクラスがある。[WelcomeMain1.java]を実行すると下のような結果になるように[Welcome1.java]の空欄を埋めてください。        練習8-2 下記 …

サンプルイメージ

プログラミングの効率的な勉強法

やる前から苦手意識を持たない。答えは一つではない。 プログラミングはパソコンに対してこうしろと命令文を書いているだけです。 少し勉強しただけで、自分にはプログラミングに向いていないと諦めてしまう人がい …

サンプルイメージ

演算子の優先順位

a + 2 * 5  2*5が先に評価されます。 この式では、+演算子と*演算子の2つが使われています。通常の四則演算では、たし算よりかけ算を先に計算します。これは、かけ算の方が 優先順位が高い から …

サンプルイメージ

List、Mapインターフェイス

     ArrayListとは、配列とよく似ています。値の集合を扱うときに利用します。 リストは要素が追加された順番を保持します。又重複した要素もそのまま保持することができます。 下記のコードでは、 …

サンプルイメージ

練習問題(配列)解答例

配列を利用すると、同じ種類の多くのデータを扱うことができます。たくさんのデータをまとめ、簡単に管理することができます。今はすべてを理解しようとせずに前に進みましょう。 大切なのは、プログラミングを勉強 …