Javaの基礎を抑えたい#5【配列変数と多次元配列】
前回までで、Javaというかアルゴリズムの基礎を抑えてきた感じはありますが、今回は大量のデータを扱うことを目的として、配列変数を学んでいきます。
実際に配列変数を使っているプログラムを使って見ていきます。
配列変数
# 普通に代入するプログラム
package day5;
public class Sample501 {
public static void main(String[] args) {
double one,two,three;
double sum,avg; // 合計値、平均値を入れる変数
one = 1.2;
two = 3.7;
three = 4.1; // 変数の代入
System.out.println(one + " " + two + " " + three);
sum = one + two + three; // 合計値の計算
avg = sum / 3.0; // 平均値の計算
System.out.println("合計値:" + sum);
System.out.println("平均値:" + avg);
}
}
# 配列変数を活用したプログラム
package day5;
public class Sample502 {
public static void main(String[] args) {
double[] d = new double[3];
double sum,avg; // 合計値、平均値を入れる変数
// 値を代入
d[0] = 1.2;
d[1] = 3.7;
d[2] = 4.1;
sum = 0.0;
for(int i = 0; i < d.length; i++){
System.out.print(d[i] + " ");
sum += d[i];
}
System.out.println();
avg = sum / 3.0;
System.out.println("合計値:" + sum);
System.out.println("平均値:" + avg);
}
}
上記の通り、変数を3つの場合は恩恵を受けづらいかもしれませんが、変数d の配列内に数字をキーとし代入していることで、それぞれ別の変数に代入することなく値を管理できます。また、for文の条件式もlenghtを活用することで、配列内の値の数だけ処理を繰り返すことができます。
double[] d = new double[3];
今回のテーマでもある配列変数の宣言です。これを宣言することで、同一の名前(このプログラムでは変数d)に多数のデータを格納できるようにしています。配列の仕組み的にはRubyと酷似していますが、変数の宣言時に配列の大きさを決めてあげる必要があるので、その点を注意しなければいけない気がします。その他の要素である、配列の添字も同様で0から決めてあげるので、この点もRubyと同様なのでイメージはしやすいです!
多次元配列
配列変数の応用にあたります。説明によると「複数の添字をつけることができる配列変数」とのこと。???
多次元配列の基本となる、二次元配列を見ながら学んでいきます。
package day5;
public class Sample504 {
public static void main(String[] args) {
int a[][] = new int[3][4];
int m,n;
// 二次元配列に値を代入
for(m = 0; m < a.length; m++){
for(n = 0; n < a[m].length; n++){
a[m][n] = m+n;
}
}
// 成分の表示
for(m = 0; m < a.length; m++){
for(n = 0; n < a[m].length; n++){
System.out.print(a[m][n]+" ");
}
System.out.println();
}
}
}
宣言しているaが二次元配列にあたります。ちょっとわかりずらかったので、図を用いて。
2つの添字?と思っていましたが、この図の通り、表を用いた計算や座標のようなデータの処理、管理に向いていると理解しました。newでイメージする形の配列を展開し処理をしていきます。
添字と配列の数のズレがRubyを触っている時から違和感でしたが、多次元配列の場合は、尚更違和感ありです。慣れるしかなさそう。。
今回の配列ないし、多次元配列を学んだことで、Javaの強みというかJavaを使う上で求められることの一角を理解できたような気がしました。
こうやって様々な言語を理解し、自分の状況に応じた引き出しを増やしていければと改めて思いました!
次回はクラスとオブジェクトを改めて学習し、Javaも理解深めつつRubyの理解にも相乗効果が生まれるよう頑張りたいと思います!
この記事が気に入ったらサポートをしてみませんか?