Javaでは、全ての変数を宣言するとき。型の指定をする必要があります。
一般形: 型指定子 変数 = 値
public class Main {
public static void main(String[] args) {
int 整数 = 12; // 4バイト 約10桁 整数ではこれが標準
long 長整数 = 1235689; // 8バイト 約20桁
float 実数 = 12.3f; // 4バイト有効桁数7 末尾に f を付ける
double 長実数 = 1.24E8; // 8バイト有効桁数14 実数ではこれが標準
String 文字列 = "あいうえお"; // 任意の文字列
System.out.println("====== 変数の宣言 ========");
System.out.println("int 整数 = " + 整数); // 12
System.out.println("long 長整数 = " + 長整数); // 1235689
System.out.println("float 実数 = " + 実数); // 12.3 fがつかない
System.out.println("double 長実数 = " + 長実数); // 1.24E8
System.out.println("String 文字列 = " + 文字列); // あいうえお
System.out.println("== 計算での型変換 =="); // int<long<float<double:型混合算では右側に変換されて計算
System.out.println("A" + (整数 + 100)); // 112
System.out.println("B" + (長整数 + 整数)); // 1235701 整数の型が長整数に合わされる
System.out.println("C" + (実数 + 100.04f)); // 112.340004 計算でのリテラルにも f が必要
System.out.println("D" + (実数 + 100.04)); // 112.34000019073487 fを付けないと double とみなされる
System.out.println("E" + (長実数 / 整数)); // 1.0333333333333334E7 整数が長実数に型変換されつ
System.out.println("F" + ("ab" + "cd")); // abcd
System.out.println("G" + ("ab" + 整数)); // ab12 文字と数値では、数値が文字列になる。
}
}
複数の値を持つ変数には、配列とリストがあります。
Java の配列には大きな制約があります。
・配列の要素は単一でなければなりません。
["阿部", "文学部", 20] のような配列は定義できません。
・配列のサイズは事前に指定しておく必要があります。
リストに関しては後述します。
public class Main {
public static void main(String[] args) {
int[] 配列A = {10, 11, 12}; // ア [ ] ではなく { }
System.out.println("配列A.length = " + 配列A.length); // イ 配列A.length = 3
System.out.println("配列A[0] = " + 配列A[0]); // ウ 配列A[0] = 10
// System.out.println("配列A[5] = " + 配列A[5]); // エ コンパイルエラー
int[] 配列B = new int[3]; // オ 配列A.length = 3
// int[] 配列B = new int[]; // カ コンパイルエラー
配列B[0] = 100; // キ
配列B[1] = 110; // ク 配列B[2]は指定していない
System.out.println("配列B.length = " + 配列A.length); // エ 配列B.length = 3
System.out.println("配列B[2] = " + 配列B[2]); // オ 配列B[2] = 0 undefineではない
System.out.println("配列B = " + 配列B); // カ 配列B = [I@3a71f4dd 意味不明
// int[] 配列B = new int[]; // キ コンパイルエラー
// int[] 配列C = new int{10, 11, 12}; // ク コンパイルエラー [ ] にしてもエラー
}
}
オ: 型指定子[] 配列名 = new 型指定子[サイズ]
サイズは省略できません(キ)
ア: 型指定子[] 配列名 = {要素のリスト}
[ ] ではなく { } で囲みます。
リストの個数でサイズが決定します。
クのような指定はできません。
public class Main {
public static void main(String[] args) {
int[][] 配列A = { { 0, 1, 2}, // ア
{10, 11, 12}
};
System.out.println("配列A.length = " + 配列A.length); // イ 配列A.length = 2 行数
System.out.println("配列A[0].length = " + 配列A[0].length); // ウ 配列A[0].length = 3 列数
System.out.println("配列A[1][2] = " + 配列A[1][2]); // エ 配列A[1][2] = 12
System.out.println("配列A[1] = " + 配列A[1]); // オ 配列A[1] = [I@3a71f4dd
System.out.println("配列A = " + 配列A); // カ 配列A = [[I@85ede7b
int 行数 = 2;
int 列数 = 3;
int[][] 配列B = new int[行数][列数]; // キ
配列B[1][2] = 12; // ク 個々の要素で指定
// 配列B[0] = [0, 1, 2}; // ケ コンパイルエラー
int i = 1;
int j = 2;
System.out.println("配列B[i][j] = " + 配列B[i][j] ); // コ 配列B[i][j] = 12
}
}
リストは ArrayList で定義され、サイズは事前に指定せず、動的に追加できます。
import java.util.*; // ア public class Main { public static void main(String[] args) { ArrayList<Integer> リストA = new ArrayList<Integer>(); // イ リストA.add(10); // ウ リストA.add(11); リストA.add(12); System.out.println("リストA.size() = " + リストA.size()); // エ リストA.size() = 3 System.out.println("リストA.get(0)= " + リストA.get(0)); // オ リストA.get(0)= 10 // System.out.println("リストA.get(5)= " + リストA.get(5)); // カ コンパイルエラー List<Integer> リストB = new ArrayList<Integer> ( // キ Arrays.asList(100, 110, 120) ); System.out.println("リストB.get(0)= " + リストB.get(0)); // ク リストB.get(0)= 100 } }
ウ: List<プリミティブ型> リスト名 = new ArrayList<プリミティブ型>();
リスト.add(要素) で値をあたえる。
キ: List<プリミティブ型>リスト名 = new ArrayList<プリミティブ型>>(
Arrays.asList(要素[0], 要素[1], ・・・) ←初期値をここで与える
);
前と後のプリミティブ型が同じとき(通常)は。後を <> と略記できます。
import java.util.*;
public class Main {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> // ア 2次元リストの定義
リスト = new ArrayList<ArrayList<Integer>>();
リスト.add( // イ 1行の追加
new ArrayList<Integer>(Arrays.asList(0,1,2))
);
リスト.add(
new ArrayList<Integer>(Arrays.asList(10,11,12))
);
// System.out.println("リスト[1][2] = " + リスト[1][2]); // ウ リスト[1][2] コンパイルエラー
System.out.println("リスト.get(1).get(2) = " + リスト.get(1).get(2)); // エ 要素 リスト.get(1).get(2)= 12
System.out.println("リスト.get(1) = " + リスト.get(1)); // オ 1行 リスト.get(1)= [10, 11, 12]
System.out.println("リスト = " + リスト); // カ 全体 リスト = [[0, 1, 2], [10, 11, 12]]
System.out.println("リスト.size() = " + リスト.size()); // キ 行数 リスト.size() = 2
// System.out.println("リスト[0].size() = " + リスト[0].size()); // ク コンパイルエラー
System.out.println("リスト.get(0).size() = " + リスト.get(0).size()); // ケ 列数 リスト.get(0).size() = 3
}
}
Javaには構造体はありません。それをクラスで代替し実現します。
class 学生クラス { // 構造体をクラスとして定義 String 氏名; // ┐ String 学部; // ├ 構造体の各要素の型指定をする int 年齢; // ┘ } public class Main { public static void main(String[] args) { 学生クラス 学生 = new 学生クラス(); 学生.氏名 = "阿部"; // ┐ 学生.学部 = "文学部"; // ├ これらの型は学生クラスから引き継がれる 学生.年齢 = 20; // ┘ System.out.println(学生.氏名 + ", " + 学生.学部 + ", " + 学生.年齢); // 阿部, 文学部, 20 } }
class 学生クラス {
String 氏名;
String 学部;
int 年齢;
};
public class Main {
public static void main(String[] args) {
学生クラス[] 学生 = new 学生クラス[2]; // 学生数 = 2
for (int i=0; i<学生.length; i++) {
学生[i] = new 学生クラス(); // 各要素ごとにインスタンス化
};
学生[0].氏名 = "阿部";
学生[0].学部 = "文学部";
学生[0].年齢 = 20;
学生[1].氏名 = "井上";
学生[1].学部 = "工学部";
学生[1].年齢 = 20;
for (int i=0; i<学生.length; i++) {
System.out.println(学生[i].氏名 + ", " + 学生[i].学部 + ", " + 学生[i].年齢); // 阿部, 文学部, 20
}; // 井上, 工学部, 20
};
}