スタートページJavascriptJava

Javaシリーズの目次

Javaの文法(2) 変数の型指定


型指定

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]  のような配列は定義できません。
 ・配列のサイズは事前に指定しておく必要があります。
リストに関しては後述します。

固定長1次元配列

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};                       // ク コンパイルエラー [ ] にしてもエラー
 
  }
}

固定長2次元配列

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 で定義され、サイズは事前に指定せず、動的に追加できます。

1次元リスト

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

2次元リスト

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には構造体はありません。それをクラスで代替し実現します。

1次元構造体

class 学生クラス {   // 構造体をクラスとして定義
  String 氏名;    // ┐
  String 学部;    // ├ 構造体の各要素の型指定をする
  int 年齢;       // ┘
}
public class Main {
  public static void main(String[] args) {
    学生クラス 学生 = new 学生クラス();
    学生.氏名 = "阿部";    // ┐
    学生.学部 = "文学部";  // ├ これらの型は学生クラスから引き継がれる
    学生.年齢 = 20;        // ┘
    System.out.println(学生.氏名 + ", " + 学生.学部 + ", " + 学生.年齢);    // 阿部, 文学部, 20
  }
}

2次元構造体

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