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 }; }