未分類

配列のしくみ①

投稿日:2020年8月9日 更新日:

プログラムの中ではたくさんのデータを扱う場合があります。例えば、50体のキャラクターの攻撃力や体力や属性を扱うプログラムを考えてみましょう。

たくさんの変数が登場するので、コードが複雑で読みにくくなります。

このようなときには、配列(array)というしくみを利用すると便利です。

変数が特定の1つの値を記憶させる機能をもっています。ただし配列は、

同じ型の値を複数まとめて記憶する

という便利な機能を備えています。

いくつもの同じ名前のハコが組になって並んでいるイメージを思い浮かべてください。

配列を準備する

Javaでは、配列を使う前に次の2つの作業が必要になります。

  1. 配列を扱う変数を用意する(配列を宣言する)
  2. 値を格納するハコを用意する(配列要素を確保する)

1の配列を使うためにはまず、

配列を扱う変数を用意することになります。これは次のように行います。

int[] attack;  配列変数attackを用意します。

int型の値を格納する配列型は、int[]型と呼ばれています。これが1つ目の作業です。

2つ目の作業として、値を格納するハコを、指定した数だけ用意する

という作業が必要です。配列のハコのことを配列の要素(element)といいます。ハコを用意する作業を、配列要素の確保と呼びます。

attack= new int[5];  int型の値を5つ記憶できる配列要素を確保します

newという演算子を使うと、[]内に指定した数だけの配列のハコがコンピューターのメモリ上に準備されます。newを使った結果を代入演算子を使って、先ほど用意した配列変数に代入します。こうすると、

配列変数の名前を使って、配列の要素を扱うことができる

ようになるのです。

attack[0]  attack[1]  attack[2]  attack[3]  attack[4]

[]の中の番号は、添字(インデックス:index)と呼ばれています。Javaの配列の添字は、0からはじまるので、

最大の番号は「要素数-1」

となります。attack[4]が値を格納できる最後の要素となります。attack[5]は存在しないので注意してください。

  • char[] singou= new singou[3];
  • singou[0] = ‘赤’; singou[1] = ‘黄’; singou[2] = ‘青’;
  • char型の要素を扱う配列です。

繰り返し文を配列に用いる

繰り返し文を使って、配列に格納した属性を出力するコードを作成してみることにします。

配列の各要素に値を代入しています。そのあとfor文で各要素の値を出力します。配列の添字は0から始まっているので、繰り返し文の中では出力する順番を「i+1番目」と指定します。

このように配列では、

各要素を指定するときの添字に変数を使う

ことができるようになっています。

配列の添字についての注意

配列を使う場合、注意しておかないといけないことがあります。

配列の大きさをこえた要素は利用することができない。

ということです。5つの要素をもつ配列にattack[10]などといった添字を指定して、値を代入してはいけないのです。

キーボードから要素数を入力する

配列要素の数をいくつにしてよいのかわからない場合もあります。「ダンジョン探索者が何人かわからない」という場合を考えてみましょう。このような時、配列要素の数をキーボードから入力できるようにしておくと便利です。

上記のコードのように必要なだけの配列要素を確保して柔軟なプログラムを作成することができます。

もうひとつの配列の準備方法

配列を準備するために行う「配列の宣言」と「要素の確保」という2つの文で記述していました。

int[] attack;   attack = new int[5];

この2つの処理は1つの文にまとめて書くことができます。次の記述を見てください。

int[] attack= new int[5];

このように、配列の準備はまとめて1つの文で記述することもできます。

配列を初期化する

「配列の宣言」と「要素の確保」をまとめて行う方法を学びました。さらに「値の代入」まで一緒に行う文を記述してしまうことも可能です。

これを配列の初期化といいます。

これまでとりあげてきたキャラクターの攻撃力を扱う配列は次のように記述できます。

int[] attack= {80,60,22,50,75};

要素数を指定していないことに注意してください。newのキーワードを使っていません。

上記のコードを書き換えました実行結果はSample7_03_2と同じです。

配列変数に代入する

配列変数はnewを使って要素を確保するとき以外にも、代入演算子で代入することができます。

最初に、要素を確保して配列変数attackに代入しています。次に配列の宣言だけを行って、attack2という配列変数を用意しました。そして、代入演算子を使ってattack2にattack1を代入しています。

attack2[0]、attack2[1]、attack2[2]の値を出力してみると、attack1と同じものが出力されました。

配列変数に代入するということ

配列変数には代入をすることができます。結果attack1、attack2から同じ点数を出力することができました。但し、代入により同じ配列が2つ存在することではありません。

上記のコードでは、attack1[2]を指定して、要素のうちのひとつの攻撃力を100に変更しました。

このあと、attack1[2]とattack2[2]を出力してみると、どちらも同じように変更されているのがわかります。つまり、attack1とattack2は異なる2つの配列ではなく、「同じ1つの配列をさしている」のです。test1を使ってデーターを変更するとattack2のデータも変更されます。

つまり、配列変数に代入するということは、配列が増えるのではなく、

代入された左辺の配列変数が、右辺の配列変数のさしている配列をさすようになる

ということを意味しています。

-未分類

執筆者:


comment

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

関連記事

サンプルイメージ

練習問題(日付クラス)

         練習12-1 実行した日を含め30日を画面に表示してください。 練習12-2 CharacterオブジェクトをyyyyMMdd形式の文字列に変換するメソッド、formatYMDを作成 …

サンプルイメージ

はじめてのAndroidアプリ作成

     文字列を描画するプログラムを作り解説します。 ソースコードの追加 ソースコードを追加する手順は次の通りです。今回は、「StringEx」と「StringView」の2つを追加します。 ①プロ …

サンプルイメージ

List、Mapインターフェイス

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

サンプルイメージ

練習問題解答(クラスの機能)

          ここまでは、クラスとその機能を見てきました。次の章では、クラスを実際に活用していく方法を学んでいきましょう。

サンプルイメージ

クラスとは

これまでの章では、変数や配列など、さまざまなjavaの機能について学んできました。このような知識を使えば、いろいろなプログラムを自由に作成することができます。 たとえば、カードゲームのカードを管理する …