Javaのメソッドとクラス基礎 課題集 (全30問)

2025-08-01

初級問題 (9問)

メソッド基礎

  1. 引数なしメソッド: “Hello, World!”と表示するgreetメソッドを作成してください。
  2. 引数ありメソッド: 名前を受け取り、”Hello, [名前]!”と表示するgreetWithNameメソッドを作成してください。
  3. 戻り値ありメソッド: 2つの整数を受け取り、その和を返すaddメソッドを作成してください。
  4. メソッドのオーバーロード: addメソッドを、double型にも対応できるようにオーバーロードしてください。
  5. voidメソッド: 受け取った数値が偶数か奇数かを表示するcheckEvenOddメソッドを作成してください。
  6. 複数引数メソッド: 3つの整数を受け取り、その平均を返すaverageメソッドを作成してください。
  7. 文字列操作メソッド: 文字列を受け取り、その長さを返すgetStringLengthメソッドを作成してください。
  8. ローカル変数: メソッド内でローカル変数を使用する例を作成してください。
  9. メソッド呼び出し: mainメソッドから他のメソッドを呼び出す例を作成してください。

中級問題 (15問)

クラス基礎

  1. クラス定義: Personクラスを定義し、nameとageのフィールドを持たせてください。
  2. コンストラクタ: Personクラスに、nameとageを初期化するコンストラクタを追加してください。
  3. ゲッター/セッター: Personクラスに、nameとageのゲッターとセッターを追加してください。
  4. メソッド追加: Personクラスに、自己紹介をするintroduceメソッドを追加してください。
  5. オブジェクト生成: mainメソッドでPersonクラスのインスタンスを生成し、メソッドを呼び出してください。
  6. 複数オブジェクト: 2つのPersonオブジェクトを生成し、それぞれ異なるデータを設定してください。
  7. staticメソッド: MathUtilityクラスを作成し、円の面積を計算するstaticメソッドを追加してください。
  8. static変数: Personクラスに生成されたインスタンスの数をカウントするstatic変数を追加してください。
  9. カプセル化: BankAccountクラスを作成し、残高(balance)をprivateで宣言し、適切なアクセスメソッドを追加してください。
  10. thisキーワード: コンストラクタやメソッドでthisキーワードを使用する例を作成してください。

クラス活用

  1. 配列とオブジェクト: Personオブジェクトの配列を作成し、データを設定するプログラムを作成してください。
  2. メソッド配列引数: 整数配列を受け取り、その合計を返すメソッドを作成してください。
  3. オブジェクト配列戻り値: 複数のPersonオブジェクトを生成して返すメソッドを作成してください。
  4. nullチェック: メソッド内でオブジェクトがnullかどうかをチェックする処理を追加してください。
  5. 不変オブジェクト: 不変(immutable)なStudentクラスを作成してください。

上級問題 (6問)

  1. 再帰的メソッド: 再帰を使用して階乗を計算するメソッドを作成してください。
  2. 例外処理: メソッド内で例外をスローし、呼び出し元でキャッチする例を作成してください。
  3. 可変長引数: 可変長引数を受け取り、その平均を計算するメソッドを作成してください。
  4. メソッドチェーン: メソッドチェーンが可能なStringBuilderのようなクラスを作成してください。
  5. ファクトリメソッド: オブジェクト生成を担当するstaticファクトリメソッドを持つクラスを作成してください。
  6. シングルトンパターン: シングルトンパターンを実装したクラスを作成してください。

Javaのメソッドとクラス基礎 解答例

初級問題の解答

  1. 引数なしメソッド
public static void greet() {
    System.out.println("Hello, World!");
}
  1. 引数ありメソッド
public static void greetWithName(String name) {
    System.out.println("Hello, " + name + "!");
}
  1. 戻り値ありメソッド
public static int add(int a, int b) {
    return a + b;
}
  1. メソッドのオーバーロード
public static double add(double a, double b) {
    return a + b;
}
  1. voidメソッド
public static void checkEvenOdd(int num) {
    if (num % 2 == 0) {
        System.out.println(num + "は偶数です");
    } else {
        System.out.println(num + "は奇数です");
    }
}
  1. 複数引数メソッド
public static double average(int a, int b, int c) {
    return (a + b + c) / 3.0;
}
  1. 文字列操作メソッド
public static int getStringLength(String str) {
    return str.length();
}
  1. ローカル変数
public static void exampleMethod() {
    int localVar = 10; // ローカル変数
    System.out.println(localVar);
}
  1. メソッド呼び出し
public static void main(String[] args) {
    greet();
    greetWithName("Alice");
    int sum = add(5, 3);
    System.out.println("合計: " + sum);
}

中級問題の解答

  1. クラス定義
class Person {
    String name;
    int age;
}
  1. コンストラクタ
class Person {
    String name;
    int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
  1. ゲッター/セッター
class Person {
    private String name;
    private int age;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getAge() {
        return age;
    }
    
    public void setAge(int age) {
        this.age = age;
    }
}
  1. メソッド追加
class Person {
    // ... 他のコード ...
    
    public void introduce() {
        System.out.println("こんにちは、私は" + name + "です。" + age + "歳です。");
    }
}
  1. オブジェクト生成
public static void main(String[] args) {
    Person person = new Person("田中", 25);
    person.introduce();
}
  1. 複数オブジェクト
Person person1 = new Person("佐藤", 30);
Person person2 = new Person("鈴木", 22);
person1.introduce();
person2.introduce();
  1. staticメソッド
class MathUtility {
    public static double calculateCircleArea(double radius) {
        return Math.PI * radius * radius;
    }
}
  1. static変数
class Person {
    private static int count = 0;
    
    public Person() {
        count++;
    }
    
    public static int getCount() {
        return count;
    }
}
  1. カプセル化
class BankAccount {
    private double balance;
    
    public double getBalance() {
        return balance;
    }
    
    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }
    
    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
}
  1. thisキーワード
class Person {
    private String name;
    
    public Person(String name) {
        this.name = name; // thisでフィールドを参照
    }
    
    public void setName(String name) {
        this.name = name;
    }
}
  1. 配列とオブジェクト
Person[] people = new Person[3];
people[0] = new Person("山田", 20);
people[1] = new Person("佐藤", 25);
people[2] = new Person("田中", 30);

for (Person person : people) {
    person.introduce();
}
  1. メソッド配列引数
public static int sumArray(int[] numbers) {
    int sum = 0;
    for (int num : numbers) {
        sum += num;
    }
    return sum;
}
  1. オブジェクト配列戻り値
public static Person[] createPeople() {
    Person[] people = new Person[2];
    people[0] = new Person("Alice", 25);
    people[1] = new Person("Bob", 30);
    return people;
}
  1. nullチェック
public static void printPersonInfo(Person person) {
    if (person == null) {
        System.out.println("Personオブジェクトがnullです");
        return;
    }
    person.introduce();
}
  1. 不変オブジェクト
final class Student {
    private final String name;
    private final int id;
    
    public Student(String name, int id) {
        this.name = name;
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public int getId() {
        return id;
    }
}

上級問題の解答

  1. 再帰的メソッド
public static int factorial(int n) {
    if (n <= 1) {
        return 1;
    }
    return n * factorial(n - 1);
}
  1. 例外処理
public static void riskyMethod() throws Exception {
    throw new Exception("何か問題が発生しました");
}

public static void main(String[] args) {
    try {
        riskyMethod();
    } catch (Exception e) {
        System.out.println("エラー: " + e.getMessage());
    }
}
  1. 可変長引数
public static double average(int... numbers) {
    if (numbers.length == 0) return 0;
    int sum = 0;
    for (int num : numbers) {
        sum += num;
    }
    return (double)sum / numbers.length;
}
  1. メソッドチェーン
class MyStringBuilder {
    private String value;
    
    public MyStringBuilder() {
        value = "";
    }
    
    public MyStringBuilder append(String str) {
        value += str;
        return this;
    }
    
    public String toString() {
        return value;
    }
}

// 使用例
MyStringBuilder sb = new MyStringBuilder();
sb.append("Hello").append(" ").append("World");
System.out.println(sb.toString());
  1. ファクトリメソッド
class Product {
    private String name;
    private double price;
    
    private Product(String name, double price) {
        this.name = name;
        this.price = price;
    }
    
    public static Product createProduct(String name, double price) {
        return new Product(name, price);
    }
}
  1. シングルトンパターン
class Singleton {
    private static Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}