未分類

配列の応用

投稿日:

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

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

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

関連記事

サンプルイメージ

オーバーライド

新しくメンバを付け加えるように、サブクラスを拡張してきました。サブクラスで新しくメソッドを記述するときには、 スーパークラスとまったく同じメソッド名・引数の数・型をもつメソッドを定義することができる …

サンプルイメージ

メソッドの基本

「キャラクター」クラスを作成するときには、キャラクターに関するさまざまな「機能」を、メソッドというしくみでまとめることができます。 メソッドは、フィールドとともにクラスのメンバと呼ばれます。 下記のブ …

サンプルイメージ

画面への出力

前回画面に文字列を出力するコードを学習しました。「System.out.println・・・」という言葉に注目してください。この「System.out」とは、 標準出力(standard output …

サンプルイメージ

変数

変数のしくみを知る プログラムを実行するとき、いろいろな値を記憶させながら処理をしていきます。例えば ユーザーが入力した数値を画面に出力する というプログラムについて考えてみましょう。まず、数値をどこ …

サンプルイメージ

練習問題(for)解答例

以下に問題の解答例を記述します。 いかがでしょうか。多くの人は文法は理解できたが、それをどこでどのように使えばいいのかわからないと思っている人がほとんどでしょう。 何かを作成するまで処理の流れや組み合 …