第12回 課題解答

1 : toString(), equals()

public class Main {
  public static void main(String[] args) {
    Student student1 = new Student("和島 茂", "青森", 2, 3124000);
    String str = student1.toString();
    System.out.println(str);
    Student student2 = new Student("和島 茂", "青森", 2, 3124000);
    Student student3 = student2;
    // student1とstudent2の比較
    if (student1.equals(student2)){
      System.out.println("student1とstudent2は同じです");
    } else {
      System.out.println("student1とstudent2は違います");
    }
    // student2とstudent3の比較
    if (student2.equals(student3)){
      System.out.println("student2とstudent3は同じです");
    } else {
      System.out.println("student2とstudent3は違います");
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  String name; // 名前
  String campus; // 所属キャンパス
  int grade; // 学年
  int id; // 学籍番号
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    this.name = name;
    this.campus = campus;
    this.grade = grade;
    this.id = id;
  }
 
  // toStringメソッド
  public String toString() {
    String str = "名前:" + name + ","; // 名前
    str += "キャンパス:" + campus + ","; // キャンパス
    str += "学年:" + grade + ","; // 学年
    str += "学籍番号:" + id; // 学籍番号
    return str;
  }
}
実行結果

2 : 継承

public class Main {
  public static void main(String[] args) {
    // 奨学生のインスタンスを生成
    ScholarshipStudent ss = new ScholarshipStudent("和島 茂", "青森", 2, 3124000, "日本学生支援機構", 100000);
    // 奨学生の情報を表示
    System.out.println("氏名:" + ss.name);
    System.out.println("キャンパス:" + ss.campus);
    System.out.println("学年:" + ss.grade);
    System.out.println("学籍番号:" + ss.id);
    System.out.println("奨学金名:" + ss.scholarshipName);
    System.out.println("奨学金の額:" + ss.scholarshipAmount);
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  String name; // 名前
  String campus; // 所属キャンパス
  int grade; // 学年
  int id; // 学籍番号
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    this.name = name;
    this.campus = campus;
    this.grade = grade;
    this.id = id;
  }
 
  // toStringメソッド
  public String toString() {
    String str = "名前:" + name + ","; // 名前
    str += "キャンパス:" + campus + ","; // キャンパス
    str += "学年:" + grade + ","; // 学年
    str += "学籍番号:" + id; // 学籍番号
    return str;
  }
}
 
// 奨学生のクラス
class ScholarshipStudent extends Student {
  // フィールド
  String scholarshipName; // 奨学金名
  int scholarshipAmount; // 奨学金の額
  // コンストラクタ
  ScholarshipStudent(String name, String campus, int grade, int id, String scholarshipName, int scholarshipAmount){
    super(name, campus, grade, id); // スーパークラスのコンストラクタを呼び出す
    this.scholarshipName = scholarshipName;
    this.scholarshipAmount = scholarshipAmount;
  }
}
実行結果

3 : オーバーライド

public class Main {
  public static void main(String[] args) {
    // 奨学生のインスタンスを生成
    ScholarshipStudent ss = new ScholarshipStudent("和島 茂", "青森", 2, 3124000, "日本学生支援機構", 100000);
    // 奨学生の情報を表示
    System.out.println(ss.toString());
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  String name; // 名前
  String campus; // 所属キャンパス
  int grade; // 学年
  int id; // 学籍番号
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    this.name = name;
    this.campus = campus;
    this.grade = grade;
    this.id = id;
  }
 
  // toStringメソッド
  public String toString() {
    String str = "名前:" + name + ","; // 名前
    str += "キャンパス:" + campus + ","; // キャンパス
    str += "学年:" + grade + ","; // 学年
    str += "学籍番号:" + id; // 学籍番号
    return str;
  }
}
 
// 奨学生のクラス
class ScholarshipStudent extends Student {
  // フィールド
  String scholarshipName; // 奨学金名
  int scholarshipAmount; // 奨学金の額
  // コンストラクタ
  ScholarshipStudent(String name, String campus, int grade, int id, String scholarshipName, int scholarshipAmount){
    super(name, campus, grade, id); // スーパークラスのコンストラクタを呼び出す
    this.scholarshipName = scholarshipName;
    this.scholarshipAmount = scholarshipAmount;
  }
  // toStringメソッド
  public String toString() {
    String str = super.toString(); // スーパークラスのtoStringメソッドを呼び出す
    str += ",奨学金名:" + scholarshipName + ","; // 奨学金名
    str += "奨学金の額:" + scholarshipAmount; // 奨学金の額
    return str;
  }
}
実行結果

4 : ファイルからの読み込み

import java.io.*;
import java.util.*;
 
public class Main {
  public static void main(String[] args) throws IOException {
    // 学生のリスト
    List<Student> students = new ArrayList<Student>();
    // student.csvを開く
    try (BufferedReader br = new BufferedReader(new FileReader("student.csv"))) {
      String line;
      // 最初の行をカラ読みする
      br.readLine();
      // データを読み込む
      while ((line = br.readLine()) != null) {
        String[] data = line.split(",");
        // dataの要素数が4なら学生を作成する
        if (data.length == 4) {
          students.add(new Student(data[0], data[1], Integer.parseInt(data[2]), Integer.parseInt(data[3])));
        }
        // dataの要素数が6なら奨学生を作成する
        else if (data.length == 6) {
          students.add(new ScholarshipStudent(data[0], data[1], Integer.parseInt(data[2]), Integer.parseInt(data[3]),
              data[4], Integer.parseInt(data[5])));
        }
      }
      br.close();
    } catch (IOException e) {
      System.out.println("ファイルが見つかりません。");
    }
    // 学生のリストを出力する
    for (Student student : students) {
      System.out.println(student.toString());
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  String name; // 名前
  String campus; // 所属キャンパス
  int grade; // 学年
  int id; // 学籍番号
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    this.name = name;
    this.campus = campus;
    this.grade = grade;
    this.id = id;
  }
 
  // toStringメソッド
  public String toString() {
    String str = "名前:" + name + ","; // 名前
    str += "キャンパス:" + campus + ","; // キャンパス
    str += "学年:" + grade + ","; // 学年
    str += "学籍番号:" + id; // 学籍番号
    return str;
  }
}
 
// 奨学生のクラス
class ScholarshipStudent extends Student {
  // フィールド
  String scholarshipName; // 奨学金名
  int scholarshipAmount; // 奨学金の額
  // コンストラクタ
 
  ScholarshipStudent(String name, String campus, int grade, int id, String scholarshipName, int scholarshipAmount) {
    super(name, campus, grade, id); // スーパークラスのコンストラクタを呼び出す
    this.scholarshipName = scholarshipName;
    this.scholarshipAmount = scholarshipAmount;
  }
 
  // toStringメソッド
  public String toString() {
    String str = super.toString(); // スーパークラスのtoStringメソッドを呼び出す
    str += ",奨学金名:" + scholarshipName + ","; // 奨学金名
    str += "奨学金の額:" + scholarshipAmount; // 奨学金の額
    return str;
  }
}
実行結果

5 : getClass()

import java.io.*;
import java.util.*;
 
public class Main {
  public static void main(String[] args) throws IOException {
    // 学生のリスト
    List<Student> students = new ArrayList<Student>();
    // student.csvを開く
    try (BufferedReader br = new BufferedReader(new FileReader("student.csv"))) {
      String line;
      // 最初の行をカラ読みする
      br.readLine();
      // データを読み込む
      while ((line = br.readLine()) != null) {
        String[] data = line.split(",");
        // dataの要素数が4なら学生を作成する
        if (data.length == 4) {
          students.add(new Student(data[0], data[1], Integer.parseInt(data[2]), Integer.parseInt(data[3])));
        }
        // dataの要素数が6なら奨学生を作成する
        else if (data.length == 6) {
          students.add(new ScholarshipStudent(data[0], data[1], Integer.parseInt(data[2]), Integer.parseInt(data[3]),
              data[4], Integer.parseInt(data[5])));
        }
      }
      br.close();
    } catch (IOException e) {
      System.out.println("ファイルが見つかりません。");
    }
    // 学生のリストを出力する
    for (Student student : students) {
      System.out.print(student.name + "は");
      System.out.println(student.getClass());
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  String name; // 名前
  String campus; // 所属キャンパス
  int grade; // 学年
  int id; // 学籍番号
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    this.name = name;
    this.campus = campus;
    this.grade = grade;
    this.id = id;
  }
 
  // toStringメソッド
  public String toString() {
    String str = "名前:" + name + ","; // 名前
    str += "キャンパス:" + campus + ","; // キャンパス
    str += "学年:" + grade + ","; // 学年
    str += "学籍番号:" + id; // 学籍番号
    return str;
  }
}
 
// 奨学生のクラス
class ScholarshipStudent extends Student {
  // フィールド
  String scholarshipName; // 奨学金名
  int scholarshipAmount; // 奨学金の額
  // コンストラクタ
 
  ScholarshipStudent(String name, String campus, int grade, int id, String scholarshipName, int scholarshipAmount) {
    super(name, campus, grade, id); // スーパークラスのコンストラクタを呼び出す
    this.scholarshipName = scholarshipName;
    this.scholarshipAmount = scholarshipAmount;
  }
 
  // toStringメソッド
  public String toString() {
    String str = super.toString(); // スーパークラスのtoStringメソッドを呼び出す
    str += ",奨学金名:" + scholarshipName + ","; // 奨学金名
    str += "奨学金の額:" + scholarshipAmount; // 奨学金の額
    return str;
  }
}
実行結果