パーソナルプロフィールカード作成プログラム
問題説明
【解説】
この問題では: ユーザーからキーボードで名前・年齢・趣味を読み込み、枠線で装飾したプロフィールカードを標準出力に表示するプログラムを作成します。
1. 問題の背景と目的
この問題は、Javaプログラミングの基本である「キーボード入力」を学ぶために設計されています。実際のプログラムでは、ユーザーから情報を受け取り、それを処理して結果を表示することが頻繁にあります。この問題を通じて、Scannerクラスを使った入力処理の基礎を身につけることができます。
また、視覚的に魅力的な出力を作成することで、プログラミングの楽しさを実感し、「自分でも役立つプログラムが作れる」という自信を得ることができます。
この学習は、次のステップである「条件分岐」や「繰り返し処理」の学習に直接繋がります。なぜなら、入力された値に応じて処理を変える(条件分岐)ことや、複数の入力を受け取る(繰り返し)ことは、プログラミングの基本パターンだからです。
2. 前提知識の詳細説明
この問題を解くには、以下の基礎知識が必要です:
変数とは何か
変数とは、プログラムが実行中にデータを一時的に記憶しておくための「名前付きの箱」です。例えば、ユーザーが入力した名前を後で使いたい場合、その名前を変数に保存しておきます。変数には「String name」のように「データ型 変数名」という形で名前を付けます。
- String型: 文字列(テキスト)を保存する型。例: 「Alice」、「Reading」
- int型: 整数を保存する型。例: 25、30、0
Scannerクラスとは何か
Scannerは、キーボードから入力を受け取るための便利な道具(クラス)です。これを使うことで、ユーザーが入力した文字列や数値を簡単に読み取ることができます。
System.inとは
System.inは「標準入力」を表す特別な変数で、通常はキーボードからの入力を指します。Scanner(System.in)と書くことで、「キーボードから入力を読み取るScannerを作成する」という意味になります。
3. コードの行ごとの詳細解説
インポート文
import java.util.Scanner;
この行は、Scannerクラスを使えるようにするための「インポート文」です。Scannerはjava.utilパッケージに含まれているため、この宣言が必要です。
Scannerオブジェクトの作成
Scanner sc = new Scanner(System.in);
この行で、キーボード入力を読み取るためのScannerオブジェクトを作成します。
- sc: Scanner変数の名前(scは「scanner」の略でよく使われます)
- new Scanner(System.in): 新しいScannerオブジェクトを作成し、System.in(キーボード)から入力を受け取るように設定
名前の読み取り
String name = sc.nextLine();
この行で、ユーザーが入力した1行分の文字列を読み取り、変数nameに保存します。
- sc.nextLine(): ScannerのnextLine()メソッドを呼び出し、ユーザーがEnterキーを押すまでの入力を文字列として取得
- この時点で、変数nameには入力された文字列(例: 「Alice」)が保存されています
年齢の読み取り
int age = sc.nextInt();
sc.nextLine(); // 改行を読み飛ばす
最初の行で、ユーザーが入力した整数を読み取り、変数ageに保存します。
- sc.nextInt(): 整数を読み取るメソッド
- 重要: nextInt()は数値だけを読み取り、その後の改行文字は残ったままになります。そのため、次にnextLine()を呼ぶと、この残った改行が読み取られてしまいます。これを防ぐために、sc.nextLine()を1回追加で呼んで改行を読み飛ばします。
年齢の検証
if (age < 0) {
System.out.println("Error: Age must be zero or positive");
return;
}
入力された年齢が負の値でないかチェックします。負の値の場合はエラーメッセージを表示してプログラムを終了します。これは「入力検証」と呼ばれる重要な処理です。
趣味の読み取り
String hobby = sc.nextLine();
名前と同様に、1行分の文字列を読み取り、変数hobbyに保存します。
プロフィールカードの表示
System.out.println("=========================");
System.out.println("PERSONAL PROFILE CARD");
System.out.println("=========================");
System.out.println("Name: " + name);
System.out.println("Age: " + age);
System.out.println("Hobby: " + hobby);
System.out.println("=========================");
保存した変数の値を使って、視覚的に魅力的なプロフィールカードを表示します。
- +演算子: 文字列を連結します。「"Name: " + name」は「Name: 」という文字列とname変数の値を結合します
- 「=」記号を並べることで、カードの上下の枠線を作成し、見やすくしています
4. よくある間違いと修正例
間違い1: nextInt()の後にnextLine()を忘れる
// 間違った例
int age = sc.nextInt();
String hobby = sc.nextLine(); // hobbyが空文字列になってしまう
理由: nextInt()は数値だけを読み取り、改行文字を残します。その結果、次のnextLine()が空の行を読み取ってしまいます。
正しい書き方:
int age = sc.nextInt();
sc.nextLine(); // 改行を読み飛ばす
String hobby = sc.nextLine(); // 正しく趣味が読み取られる
間違い2: Scannerのインポートを忘れる
// 間違った例(インポート文がない)
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // コンパイルエラー
}
}
正しい書き方: ファイルの先頭に import java.util.Scanner; を追加します。
テストケース例
※ 出力例はプログラミングの国際標準に準拠し英語で表示しています
Alice 25 Reading
========================= PERSONAL PROFILE CARD ========================= Name: Alice Age: 25 Hobby: Reading =========================
Bob 30 Cooking
========================= PERSONAL PROFILE CARD ========================= Name: Bob Age: 30 Hobby: Cooking =========================
C 0 X
========================= PERSONAL PROFILE CARD ========================= Name: C Age: 0 Hobby: X =========================
David abc Gaming
Error: Invalid number format
Emily -5 Music
Error: Age must be zero or positive
あなたの解答
残り 9 回実行可能
