013-001-002

文字列フィールドを持つクラス:名刺管理プログラム

中級

問題説明

【解説】

入力仕様

標準入力から以下の4行を読み込みます:

  • 1行目: 名前(String)
  • 2行目: 会社名(String)
  • 3行目: 役職(String)
  • 4行目: メールアドレス(String)

出力仕様

getCardInfo()メソッドの返す文字列を標準出力に1行出力します。

1. 問題の背景と目的

この問題では、文字列(String)を扱うクラスの基本を学びます。ビジネスシーンで使われる名刺の情報を管理するクラスを作成することで、「クラスとは何か」「フィールドとは何か」「コンストラクタメソッドの役割」を実践的に理解できます。実際の名刺管理アプリケーションでも同様の設計が使われており、実務で役立つスキルです。

2. 前提知識の詳細説明

クラスとは

クラスは「オブジェクトの設計図」です。名刺の情報を管理したい場合、どんな情報が必要か(名前、会社名など)、どんな操作ができるか(情報を取得する、表示するなど)を定義したものがクラスです。

Scannerによる入力

Scannerクラスを使って標準入力から文字列を読み込みます。scanner.nextLine()で1行ずつ読み取ります。読み込んだ値をNameCardのコンストラクタに渡してオブジェクトを作成します。

フィールドとは

フィールドはクラスの中で「データを保存する変数」です。名刺クラスの場合、nameフィールドには「Alice Johnson」のような名前の文字列が保存されます。privateを付けることで、クラスの外部から直接書き換えられないように保護します。

コンストラクタとは

コンストラクタは「オブジェクトを作成するときに自動的に呼ばれる特別なメソッド」です。new NameCard("Alice", "TechCorp", ...)のように書くと、このコンストラクタが実行され、渡された引数がフィールドに保存されます。

thisキーワード

this.name = name;のthisは「このオブジェクトの」という意味です。左側のthis.nameはフィールド、右側のnameは引数を指します。同じ名前を使う場合、thisで区別します。

3. プログラム構造

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        String company = scanner.nextLine();
        String title = scanner.nextLine();
        String email = scanner.nextLine();
        scanner.close();
        NameCard card = new NameCard(name, company, title, email);
        System.out.println(card.getCardInfo());
    }
}

4. よくある間違いと修正例

間違い1: thisキーワードを忘れる

// ❌ 間違い
public NameCard(String name, String company, String title, String email) {
    name = name;  // フィールドではなく引数に代入してしまう
}

// ✅ 正しい
public NameCard(String name, String company, String title, String email) {
    this.name = name;  // thisでフィールドを指定
}

間違い2: getterメソッドの戻り値の型を間違える

// ❌ 間違い
public void getName() {
    return name;  // voidは何も返さない型なのでエラー
}

// ✅ 正しい
public String getName() {
    return name;
}

5. 実践的なデバッグのヒント

コンパイルエラーが出た場合

  • クラス名とファイル名が一致しているか確認(Main.java)
  • すべてのメソッドに適切な戻り値の型を指定しているか確認
  • コンストラクタの名前がクラス名と完全に一致しているか確認

期待した出力が得られない場合

  • System.out.println()を使って、各メソッドの戻り値を確認
  • フィールドの値が正しく初期化されているか確認
  • 文字列の連結が正しく行われているか確認(+の位置など)

6. 関連する学習項目

  • カプセル化(情報隠蔽)の詳細(カテゴリ014)
  • オブジェクト指向プログラミングの基礎(カテゴリ023)
  • コレクション(複数の名刺を管理)(カテゴリ015)

テストケース例

※ 出力例はプログラミングの国際標準に準拠し英語で表示しています

正常系
入力:
Alice Johnson
TechCorp
Engineer
alice@techcorp.com
期待される出力:
+----+
| Name: Alice Johnson |
| Company: TechCorp |
| Title: Engineer |
| Email: alice@techcorp.com |
+----+
正常系
入力:
Bob Smith
InnovateLabs
Manager
bob@innovate.com
期待される出力:
+----+
| Name: Bob Smith |
| Company: InnovateLabs |
| Title: Manager |
| Email: bob@innovate.com |
+----+

あなたの解答

現在のモード: 自分のコード
Main.java🔒
NameCard.java🔒
2/6 ファイル0B
⚠️警告
  • mainメソッドが見つかりません

0 B / 5 MB

残り 10 回実行可能