第10回 課題解答

1 : 学生の配列

import java.util.*;
import java.io.*;
  
public class Main {
  public static void main(String[] args) throws IOException{
    // インスタンスの配列生成
    Student[] students = new Student[3];
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    for (int i = 0; i < students.length; i++){
      System.out.println(i + "人目の学生の情報を入力してください。");
      System.out.print("名前:");
      String name = br.readLine();
      System.out.print("所属キャンパス:");
      String campus = br.readLine();
      System.out.print("学年:");
      int grade = Integer.parseInt(br.readLine());
      System.out.print("学籍番号:");
      int id = Integer.parseInt(br.readLine());
      students[i] = new Student(name, campus, grade, id);
    }
    br.close();
    for (int i = 0; i < students.length; i++){
      students[i].introduce();
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  private String name; // 名前
  private String campus; // 所属キャンパス
  private int grade; // 学年
  private int id; // 学籍番号
 
  // クラス変数
  private static int count = 0;
 
  // クラスメソッド
  static void printCount() {
    System.out.println("学生は" + count + "人です。");
  }
 
  // デフォルトコンストラクタ
  Student() {
    setName("名無し");
    setCampus("青森");
    setGrade(1);
    setId(0);
    count++;
  }
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    setName(name);
    setCampus(campus);
    setGrade(grade);
    setId(id);
    count++;
  }
 
  // 自己紹介
  void introduce() {
    System.out.print("私は" + name + "です。");
    System.out.print(campus + "キャンパスの" + grade + "年生です。");
    System.out.println("学籍番号は" + id + "です。");
  }
 
  // 情報変更 (名前とキャンパス)
  void changeInfo(String name, String campus) {
    setName(name);
    setCampus(campus);
  }
 
  // 情報変更 (学年と学籍番号)
  void changeInfo(int grade, int id) {
    setGrade(grade);
    setId(id);
  }
 
  // セッタ (setter)
  void setName(String name) {
    this.name = name;
  }
 
  void setCampus(String campus) {
    this.campus = campus;
  }
 
  void setGrade(int grade) {
    this.grade = grade;
  }
 
  void setId(int id) {
    this.id = id;
  }
 
  // ゲッタ (getter)
  String getName() {
    return name;
  }
 
  String getCampus() {
    return campus;
  }
 
  int getGrade() {
    return grade;
  }
 
  int getId() {
    return id;
  }
}
実行結果

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

import java.util.*;
import java.io.*;
  
public class Main {
  public static void main(String[] args) throws IOException{
    // インスタンスの配列生成
    Student[] students = new Student[10];
    // ファイルから学生情報を読み込む
    BufferedReader br = new BufferedReader(new FileReader("data.txt"));
    for (int i = 0; i < students.length; i++){
      String line = br.readLine();
      String[] data = line.split(",");
      String name = data[0];
      String campus = data[1];
      int grade = Integer.parseInt(data[2]);
      int id = Integer.parseInt(data[3]);
      students[i] = new Student(name, campus, grade, id);
    }
    br.close();
    for (int i = 0; i < students.length; i++){
      students[i].introduce();
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  private String name; // 名前
  private String campus; // 所属キャンパス
  private int grade; // 学年
  private int id; // 学籍番号
 
  // クラス変数
  private static int count = 0;
 
  // クラスメソッド
  static void printCount() {
    System.out.println("学生は" + count + "人です。");
  }
 
  // デフォルトコンストラクタ
  Student() {
    setName("名無し");
    setCampus("青森");
    setGrade(1);
    setId(0);
    count++;
  }
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    setName(name);
    setCampus(campus);
    setGrade(grade);
    setId(id);
    count++;
  }
 
  // 自己紹介
  void introduce() {
    System.out.print("私は" + name + "です。");
    System.out.print(campus + "キャンパスの" + grade + "年生です。");
    System.out.println("学籍番号は" + id + "です。");
  }
 
  // 情報変更 (名前とキャンパス)
  void changeInfo(String name, String campus) {
    setName(name);
    setCampus(campus);
  }
 
  // 情報変更 (学年と学籍番号)
  void changeInfo(int grade, int id) {
    setGrade(grade);
    setId(id);
  }
 
  // セッタ (setter)
  void setName(String name) {
    this.name = name;
  }
 
  void setCampus(String campus) {
    this.campus = campus;
  }
 
  void setGrade(int grade) {
    this.grade = grade;
  }
 
  void setId(int id) {
    this.id = id;
  }
 
  // ゲッタ (getter)
  String getName() {
    return name;
  }
 
  String getCampus() {
    return campus;
  }
 
  int getGrade() {
    return grade;
  }
 
  int getId() {
    return id;
  }
}
実行結果


data.txt (例)

3 : 条件を満たすものだけを表示する

import java.util.*;
import java.io.*;
  
public class Main {
  public static void main(String[] args) throws IOException{
    // インスタンスの配列生成
    Student[] students = new Student[10];
    // ファイルから学生情報を読み込む
    BufferedReader br = new BufferedReader(new FileReader("data.txt"));
    for (int i = 0; i < students.length; i++){
      String line = br.readLine();
      String[] data = line.split(",");
      String name = data[0];
      String campus = data[1];
      int grade = Integer.parseInt(data[2]);
      int id = Integer.parseInt(data[3]);
      students[i] = new Student(name, campus, grade, id);
    }
    br.close();
    // 2年生だけに自己紹介させる
    System.out.println("2年生の学生は以下の通りです。");
    for (int i = 0; i < students.length; i++){
      if (students[i].getGrade() == 2){
        students[i].introduce();
      }
    }
    // 青森キャンパス所属の人だけに自己紹介させる
    System.out.println("青森キャンパス所属の学生は以下の通りです。");
    for (int i = 0; i < students.length; i++){
      if (students[i].getCampus().equals("青森")){
        students[i].introduce();
      }
    }
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  private String name; // 名前
  private String campus; // 所属キャンパス
  private int grade; // 学年
  private int id; // 学籍番号
 
  // クラス変数
  private static int count = 0;
 
  // クラスメソッド
  static void printCount() {
    System.out.println("学生は" + count + "人です。");
  }
 
  // デフォルトコンストラクタ
  Student() {
    setName("名無し");
    setCampus("青森");
    setGrade(1);
    setId(0);
    count++;
  }
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    setName(name);
    setCampus(campus);
    setGrade(grade);
    setId(id);
    count++;
  }
 
  // 自己紹介
  void introduce() {
    System.out.print("私は" + name + "です。");
    System.out.print(campus + "キャンパスの" + grade + "年生です。");
    System.out.println("学籍番号は" + id + "です。");
  }
 
  // 情報変更 (名前とキャンパス)
  void changeInfo(String name, String campus) {
    setName(name);
    setCampus(campus);
  }
 
  // 情報変更 (学年と学籍番号)
  void changeInfo(int grade, int id) {
    setGrade(grade);
    setId(id);
  }
 
  // セッタ (setter)
  void setName(String name) {
    this.name = name;
  }
 
  void setCampus(String campus) {
    this.campus = campus;
  }
 
  void setGrade(int grade) {
    this.grade = grade;
  }
 
  void setId(int id) {
    this.id = id;
  }
 
  // ゲッタ (getter)
  String getName() {
    return name;
  }
 
  String getCampus() {
    return campus;
  }
 
  int getGrade() {
    return grade;
  }
 
  int getId() {
    return id;
  }
}
実行結果

4 : ファイルへの出力

import java.util.*;
import java.io.*;
  
public class Main {
  public static void main(String[] args) throws IOException{
    // インスタンスの配列生成
    Student[] students = new Student[10];
    // ファイルから学生情報を読み込む
    BufferedReader br = new BufferedReader(new FileReader("data.txt"));
    for (int i = 0; i < students.length; i++){
      String line = br.readLine();
      String[] data = line.split(",");
      String name = data[0];
      String campus = data[1];
      int grade = Integer.parseInt(data[2]);
      int id = Integer.parseInt(data[3]);
      students[i] = new Student(name, campus, grade, id);
    }
    br.close();
    // 2年生の情報だけを「2.txt」に書き込む
    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("2.txt")));
    for (int i = 0; i < students.length; i++){
      if (students[i].getGrade() == 2){
        pw.println(students[i].getName() + "," + students[i].getCampus() + "," + students[i].getGrade() + "," + students[i].getId());
      }
    }
    pw.close();
    // 青森キャンパス所属の人の情報だけを「aomori.txt」に書き込む
    pw = new PrintWriter(new BufferedWriter(new FileWriter("aomori.txt")));
    for (int i = 0; i < students.length; i++){
      if (students[i].getCampus().equals("青森")){
        pw.println(students[i].getName() + "," + students[i].getCampus() + "," + students[i].getGrade() + "," + students[i].getId());
      }
    }
    pw.close();
  }
}
 
// 学生のクラス
class Student {
  // フィールド
  private String name; // 名前
  private String campus; // 所属キャンパス
  private int grade; // 学年
  private int id; // 学籍番号
 
  // クラス変数
  private static int count = 0;
 
  // クラスメソッド
  static void printCount() {
    System.out.println("学生は" + count + "人です。");
  }
 
  // デフォルトコンストラクタ
  Student() {
    setName("名無し");
    setCampus("青森");
    setGrade(1);
    setId(0);
    count++;
  }
 
  // コンストラクタ
  Student(String name, String campus, int grade, int id) {
    setName(name);
    setCampus(campus);
    setGrade(grade);
    setId(id);
    count++;
  }
 
  // 自己紹介
  void introduce() {
    System.out.print("私は" + name + "です。");
    System.out.print(campus + "キャンパスの" + grade + "年生です。");
    System.out.println("学籍番号は" + id + "です。");
  }
 
  // 情報変更 (名前とキャンパス)
  void changeInfo(String name, String campus) {
    setName(name);
    setCampus(campus);
  }
 
  // 情報変更 (学年と学籍番号)
  void changeInfo(int grade, int id) {
    setGrade(grade);
    setId(id);
  }
 
  // セッタ (setter)
  void setName(String name) {
    this.name = name;
  }
 
  void setCampus(String campus) {
    this.campus = campus;
  }
 
  void setGrade(int grade) {
    this.grade = grade;
  }
 
  void setId(int id) {
    this.id = id;
  }
 
  // ゲッタ (getter)
  String getName() {
    return name;
  }
 
  String getCampus() {
    return campus;
  }
 
  int getGrade() {
    return grade;
  }
 
  int getId() {
    return id;
  }
}
2.txt


aomori.txt