LoginSignup
3
2

More than 3 years have passed since last update.

[Processing×Java] 配列の使いかた

Last updated at Posted at 2020-07-23

この記事はプログラムの構造をProcessingを通じて理解していくための記事です。
今回は配列について書いていきます。

目次
0.配列とは
1.簡単な配列のつくりかた
2.クラスをつかった配列をつくりかた
3.要素が多い配列のつくりかた
4.配列をつかった例

0.配列とは

0-0. 配列は簡単にいうと

データを一列に並べたものです。
並べ方(順番)には意味があります。
よく目にする、座標(3,10)のようなものも配列の一種です。

0-1. なぜ配列を使うのか

主な理由は、
大量のデータをまとめてあつかうことができるから。
です。

0-2. 配列のイメージ

順位 チーム
1 巨人
2 DeNA
3 広島
4 阪神
5 中日
6 ヤクルト

この表はプロ野球セリーグの順位表です。
順番と要素(チーム)が結びついて一列に並んでいます。
こんなイメージです。

1.簡単な配列のつくりかた

①宣言
②初期設定
③使用
という手順で、配列をつくって使っていきます。

簡単な例で見てみましょう。

string.java
//配列の名前と長さの宣言(名前はnumbersで長さは7)
int[] numbers = new int[5];
//配列の要素の定義
numbers[0] = 2;
numbers[1] = 4;
numbers[2] = 6;
numbers[3] = 8;
numbers[4] = 10;

//配列の使用
int a = numbers[0] + numbers[4];
println(a);
12

このプログラムは、配列の要素(中身)を足し算して、その結果を表示するプログラムです。
手順ごとに詳しくみてみます。

①宣言

//配列の名前と長さの宣言(名前はnumbersで長さは7)
int[] numbers = new int[5];

Point:宣言の方法
データ型 [ ] 配列の名前 = new データ型 [ 配列の長さ ]

今回の例で説明すると
「今から配列をつくるんだけれども、その配列の中のデータは整数だよ。
配列の名前はnumbersで、配列の中のデータの個数は5個にするよ!」
って感じです。

②初期設定

//配列の要素の定義
numbers[0] = 2;
numbers[1] = 4;
numbers[2] = 6;
numbers[3] = 8;
numbers[4] = 10;

配列に中身を入れます。
今回は、配列の要素の中身を個別に決める方法です。
※要素の個数が多いと大変です。

③使用

//配列の使用
int a = numbers[0] + numbers[4];
println(a);

配列の要素は、配列の名前[ インデックス ]という形で指定します。
インデックスは配列の要素の順番です。
インデックスは、0,1,2...というふうに0からはじまります。

2.クラスをつかった配列をつくりかた

下のプログラムは、跳ねまわるボールを2つ描くプログラムです。
今回は、このプログラムを改造していきたいと思います。

//オブジェクトの宣言
Ball b1;
Ball b2;

void setup(){
  size(600,400);
  //オブジェクトを定義する
  b1 = new Ball(50,50,7,5);
  b2 = new Ball(400,50,-7,-5);
}

void draw(){
  background(255);
  //オブジェクトb1をつかう
  b1.display();
  b1.move();
  b1.edges();

  //オブジェクトb2をつかう
  b2.display();
  b2.move();
  b2.edges();
}

//クラスを定義する
class Ball{
  //使う変数(フィールド)を宣言する
  int x;
  int y;
  float xspeed;
  float yspeed;

  //Ballクラスのコンストラクタ
  Ball(int xpos,int ypos,float xvelocity,float yvelocity){
    x = xpos;
    y = ypos;
    xspeed = xvelocity;
    yspeed = yvelocity;
  }

  //ボールを表示する関数(メソッド)
  void display(){
    fill(234,159,217);
    noStroke();
    ellipse(x,y,30,30);
  }

  //ボールを動かす関数(メソッド)
  void move(){
    x += xspeed;
    y += yspeed;
  }

  //ボールを跳ね返らせる関数(メソッド)
  void edges(){
    if(x > width-15 || x < 15){
      xspeed *= -1;
    }
    if(y > height-15 || y < 15){
      yspeed *= -1;
    }
  }
}

2-0.クラスから配列をつくる

Ballクラスから、配列ballsをつくります。
配列の要素(中身)は2個です。

//配列(の名前と長さ)の宣言
Ball[] balls = new Ball[2];

void setup(){
  size(600,400);
  //配列の要素を定義する
  balls[0] = new Ball(50,50,7,5);
  balls[1] = new Ball(400,50,-7,-5);

}

void draw(){
  background(255);
  //配列ballsの1つ目の要素を扱う
  balls[0].display();
  balls[0].move();
  balls[0].edges();

  ////配列ballsの2つ目の要素を扱う
  balls[1].display();
  balls[1].move();
  balls[1].edges();
}

//クラスを定義する
class Ball{
  //使う変数(フィールド)を宣言する
  int x;
  int y;
  float xspeed;
  float yspeed;

  //Ballクラスのコンストラクタ
  Ball(int xpos,int ypos,float xvelocity,float yvelocity){
    x = xpos;
    y = ypos;
    xspeed = xvelocity;
    yspeed = yvelocity;
  }

  //ボールを表示する関数(メソッド)
  void display(){
    fill(234,159,217);
    noStroke();
    ellipse(x,y,30,30);
  }

  //ボールを動かす関数(メソッド)
  void move(){
    x += xspeed;
    y += yspeed;
  }

  //ボールを跳ね返らせる関数(メソッド)
  void edges(){
    if(x > width-15 || x < 15){
      xspeed *= -1;
    }
    if(y > height-15 || y < 15){
      yspeed *= -1;
    }
  }
}

クラスから配列をつくる方法を詳しく見ていきます。
配列をつくる流れは、変わりません。
つまり
①宣言
②初期設定
③使用
という流れです。

①宣言

//配列の名前と長さの宣言(名前はballsで長さは2)
Ball[] balls = new Ball[2];

Point:宣言の方法
クラス [ ] 配列の名前 = new クラス [ 配列の長さ ]

今回の例で説明すると
「今から配列をつくるんだけれども、その配列はBallクラスをもとにしてつくるよ。
配列の名前はballsで、配列の中のデータの個数は2個にするよ!」
って感じです。

②初期設定

//配列の要素を定義する
balls[0] = new Ball(50,50,7,5);
balls[1] = new Ball(400,50,-7,-5);

配列の要素を定義します。
今回は、配列の要素の中身を個別に決める方法です。
※要素の個数が多いと大変です。。

③使用

//配列ballsの1つ目の要素を扱う
balls[0].display();
balls[0].move();
balls[0].edges();

////配列ballsの2つ目の要素を扱う
balls[1].display();
balls[1].move();
balls[1].edges();

配列の要素は、配列の名前[ インデックス ]という形で指定します。

ところで配列の要素はオブジェクトです。
オブジェクトはクラスのフィールド(変数)やメソッド(関数)を持っています。
オブジェクトが、自身のもつフィールドやメソッドにアクセスするためには、ドット(.)を使います。
今回は、オブジェクト.メソッド();というかたちで使っています。

3.要素が多い配列のつくりかた

つぎは上の配列のプログラムを改造していきたいと思います。

//配列(の名前と長さ)の宣言
Ball[] balls = new Ball[20];

void setup(){
  size(600,400);
  //配列の要素を定義する
  //forループでシンプルな形でまとめます。
  for(int i = 0;i < balls.length;i++){
    balls[i] = new Ball(random(width),random(height),random(-i,i),random(-i,i));
  }
}

void draw(){
  background(255);
  //配列を使う
  //forループでシンプルな形でまとめます。
  for(int i = 0;i < balls.length;i++){
    balls[i].display();
    balls[i].move();
    balls[i].edges();
  }
}

//クラスを定義する
class Ball{
  //使う変数(フィールド)を宣言する
  int x;
  int y;
  float xspeed;
  float yspeed;

  //Ballクラスのコンストラクタ
  Ball(int xpos,int ypos,float xvelocity,float yvelocity){
    x = xpos;
    y = ypos;
    xspeed = xvelocity;
    yspeed = yvelocity;
  }

  //ボールを表示する関数(メソッド)
  void display(){
    fill(234,159,217);
    noStroke();
    ellipse(x,y,30,30);
  }

  //ボールを動かす関数(メソッド)
  void move(){
    x += xspeed;
    y += yspeed;
  }

  //ボールを跳ね返らせる関数(メソッド)
  void edges(){
    if(x > width-15 || x < 15){
      xspeed *= -1;
    }
    if(y > height-15 || y < 15){
      yspeed *= -1;
    }
  }
}

クラスから要素が多い配列をつくる方法を詳しく見ていきます。
配列をつくる流れは、変わりません。
つまり
①宣言
②初期設定
③使用
という流れです。

①宣言

//配列の名前と長さの宣言(名前はballsで長さは20)
Ball[] balls = new Ball[20];

Point:宣言の方法
クラス [ ] 配列の名前 = new クラス [ 配列の長さ ]

②初期設定

//配列の要素を定義する
//forループでシンプルな形でまとめます。
for(int i = 0;i < balls.length;i++){
  balls[i] = new Ball(random(width),random(height),random(-i,i),random(-i,i));
}

個別に要素を定義するのではなくを、ループをつかって効率よく定義していきます。

③使用

//配列を使う
//forループでシンプルな形でまとめます。
for(int i = 0;i < balls.length;i++){
  balls[i].display();
  balls[i].move();
  balls[i].edges();
}

配列の要素は、配列の名前[ インデックス ]という形で指定します。
個別に要素を使うのではなく、ループをつかって効率よく使っていきます。

ところで配列の要素はオブジェクトです。
オブジェクトはクラスのフィールド(変数)やメソッド(関数)を持っています。
オブジェクトが、自身のもつフィールドやメソッドにアクセスするためには、ドット(.)を使います。
今回は、オブジェクト.メソッド();というかたちで使っています。

4.配列をつかった例

マウスをクリックするたびに、ボールが増えていくプログラムです。

//配列の宣言
Ball[] balls = new Ball[20];

//ボールの総数を変化させたいのでそのために変数をつくる
int total = 0;

void setup(){
  size(600,400);
  //配列の要素を定義する
  //forループでシンプルな形でまとめます
  for(int i = 0;i < balls.length;i++){
    balls[i] = new Ball(random(width),random(height),random(-i,i),random(-i,i));
  }
}

//マウスが押されるたびにに、ボールの数が増えていきます
void mousePressed(){
  total += 1;
}

void draw(){
  background(255);
  //配列を使う
  //forループでシンプルな形でまとめます
  //totalの数のボールが描かれます
  for(int i = 0;i < total;i++){
    balls[i].display();
    balls[i].move();
    balls[i].edges();
  }
}

//クラスを定義する
class Ball{
  //使う変数(フィールド)を宣言する
  int x;
  int y;
  float xspeed;
  float yspeed;

  //Ballクラスのコンストラクタ
  Ball(int xpos,int ypos,float xvelocity,float yvelocity){
    x = xpos;
    y = ypos;
    xspeed = xvelocity;
    yspeed = yvelocity;
  }

  //ボールを表示する関数(メソッド)
  void display(){
    fill(234,159,217);
    noStroke();
    ellipse(x,y,30,30);
  }

  //ボールを動かす関数(メソッド)
  void move(){
    x += xspeed;
    y += yspeed;
  }

  //ボールを跳ね返らせる関数(メソッド)
  void edges(){
    if(x > width-15 || x < 15){
      xspeed *= -1;
    }
    if(y > height-15 || y < 15){
      yspeed *= -1;
    }
  }
}

最後に

読んでいただきありがとうございました。
より良い記事にしていくために御意見、ご指摘のほどよろしくお願いいたします。

※この記事は、ダニエルシェフマン氏のyoutube"Coding Train"を参考にしています。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2