変数を使った自己紹介
このレッスンで分かること
()内の型 + 名前で引数を宣言、メソッド内ではそのまま変数として使えます+連結でStringとintを混ぜると、intは自動的に文字列化されます- 最小例は
return "私は " + age + " 歳の" + name + "です。";
変数を使った自己紹介 とは
メソッドの引数で受け取った名前と年齢を文字列連結し、自己紹介の文を組み立てる練習。本レッスンでは、変数を使った自己紹介 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。
引数を使ってメッセージを組み立てる
前回は、固定の文字列を return で返すメソッドを書きました。"Hello, Java" のような決まり切ったメッセージを helloWorld から返しただけでしたが、現実のプログラムでは「呼び出すたびに違う値で挨拶する」ことが普通です。たとえば名前が "太郎" のときは "私は 25 歳の太郎です。" を返し、名前が "花子" のときは "私は 30 歳の花子です。" を返す、というようにです。
このレッスンのテーマは、メソッドに「外から値を渡す」ことです。固定値ではなく、引数で渡された
nameとageを組み合わせて自己紹介の文字列を作り、それをreturnで返します。
このレッスンで作るのは Solution.introduceMyself(String name, int age) というメソッドです。中身は "私は " + age + " 歳の" + name + "です。" という連結式 1 行で書けますが、ここには Java の重要な文法が 3 つも詰まっています。「引数」「型」「文字列連結」です。1 つずつ丁寧に確認していきましょう。
メソッドの引数とは
introduceMyself の () の中に書く String name, int age が 引数 (ひきすう) です。引数とは、メソッドの外から値を受け取るための入り口だと考えてください。電子レンジに食べ物を入れるイメージで、メソッドという箱に外から name と age を入れてあげると、中で処理されて結果が出てきます。
引数は次のように書きます。
Java
public static String introduceMyself(String name, int age) {
// ここで name と age を使える
return "私は " + age + " 歳の" + name + "です。";
}(String name, int age) の部分は「name という String 型の入り口と、age という int 型の入り口がありますよ」という宣言です。メソッドの中では name や age を変数のように扱えます。型と名前の組をカンマで区切って並べる、というのが Java の引数リストの書き方です。
引数は「外から渡される変数」と考えると分かりやすいです。
nameには呼び出し元から"太郎"のような値が入っていて、メソッドの中ではすでに値が入った状態でスタートします。自分で代入する必要はありません。
String 型と int 型の違い
Java は 型 にうるさい言語です。String は文字列を入れる型、int は整数を入れる型です。String には "太郎" や "Hello" のようなダブルクオートで囲んだ値が入り、int には 25 や 100 のような整数が入ります。文字を int に入れたり、数字を String に入れたまま計算したりはできません。
型を間違えると、コンパイル時にエラーが出ます。たとえば introduceMyself(25, "太郎") のように順番を入れ替えて呼ぶと、int と String の位置が逆なので即座にエラーになります。引数は順番も大事です。
Java では「型 + 名前」の順で引数を書きます。
String nameをname Stringと書くのは間違いです。最初に型、次に変数名、というルールを必ず守ってください。
文字列連結 + の仕組み
Java では + 演算子で文字列同士をつなげることができます。"こんにちは" + "太郎" は "こんにちは太郎" になります。さらに、文字列と数値を + で連結すると、Java は 数値を自動的に文字列に変換 してくれます。
たとえば "私は " + 25 という式は、25 を "25" に変換してから連結し、"私は 25" になります。これを使えば、int 型の age を直接 "私は " + age + " 歳" のように文字列に埋め込めます。
Java
public static String introduceMyself(String name, int age) {
String prefix = "私は ";
String middle = " 歳の";
String suffix = "です。";
return prefix + age + middle + name + suffix;
}この書き方は、上のシンプルな 1 行版とまったく同じ結果になります。変数に分けることで、何をつないでいるかが視覚的に分かりやすくなりますが、短いメソッドなら 1 行で書いてしまうのが普通です。
連結式が左から右へどう評価されていくかを図で表すと、下記のようなイメージです。
各ステップでの中間結果を表にすると、次のとおりです。
| ステップ | 式 | 結果 |
|---|---|---|
| 1 | "私は " | "私は " |
| 2 | "私は " + age | "私は 25" |
| 3 | "私は 25" + " 歳の" | "私は 25 歳の" |
| 4 | ... + name | "私は 25 歳の太郎" |
| 5 | ... + "です。" | "私は 25 歳の太郎です。" |
このように、+ は左の値と右の値を 1 つの新しい文字列にまとめる作業を順番に繰り返しています。途中で int の age が文字列に変換されている点にも注目してください。
+の左右に文字列が 1 つでもあれば、結果は文字列になります。25 + 30は55ですが、"" + 25 + 30は"2530"です。連結と足し算が同じ記号なので、慣れないうちは混乱しやすいポイントです。
もう少し凝った書き方として String.format や printf 形式の %s %d を使う方法もあります。たとえば String.format("私は %d 歳の%sです。", age, name) でも同じ結果が得られます。ただし入門段階では + 連結だけで十分なので、まずはこの形に慣れましょう。
よくある間違い
最初のうちに引っかかりやすいポイントは次のとおりです。
1 つ目は、引数の 型を逆 にしてしまうこと。(int name, String age) のように書くと、name に整数しか入らなくなり、文字列を渡したときにコンパイルエラーになります。必ず String name, int age の順で書きます。
2 つ目は、引数の 順番 を間違えること。テストでは introduceMyself("太郎", 25) のように呼ばれますが、メソッドの宣言を (int age, String name) にすると、"太郎" が age に入ろうとして即エラーになります。呼び出し側と宣言側の順番をそろえます。
3 つ目は、半角スペースの入れ忘れ です。期待される戻り値は "私は 25 歳の太郎です。" で、25 の前後に半角スペースがあります。"私は" + age + "歳の" のようにスペースを入れ忘れると、"私は25歳の太郎です。" となってテストに落ちます。
4 つ目は、+ を , と書いてしまうこと。return "私は ", age, " 歳"; は Java の文法エラーです。連結は必ず + を使います。, はメソッドの引数を区切るためだけの記号です。
期待される文字列を、まずは紙やコメントに書き出してから組み立てると、スペース漏れに気づきやすくなります。
私は ␣ 25 ␣ 歳の太郎です。のように、半角スペースの位置を可視化するのがおすすめです。
ここまでの要点
引数は () 内に 型 + 名前 で宣言、メソッド内で変数として使える。+ で String と int を混ぜると int が自動文字列化される。スペースの位置はテストの厳密一致で重要。
やってみよう
まずは starter_code を開いて、return ""; の部分を書き換えます。手順は次のとおりです。
returnの右辺に"私は " + age + " 歳の" + name + "です。"と書く25の前後に半角スペースがあることを確認- 「実行」ボタンを押して、
太郎, 25で"私は 25 歳の太郎です。"が返ることを確認 花子, 30、Bob, 18の他のテストも pass するか確認
うまくいかないときは、自分の戻り値とテストの expected を比べて、スペースが 1 つでも足りていない箇所が無いかを確認します。コンパイルエラーが出る場合は、+ を , と書いていないか、return を書き忘れていないかをチェックしてください。
慣れてきたら、戻り値の組み立てを変数に分ける書き方や、String.format を使った書き方にも挑戦してみると、Java の表現の幅が広がります。
よくある質問
Q. Java と他言語の文法はどう違いますか?
A. Java は静的型付けで、変数宣言時に型を明示します(int x = 0;)。中括弧でブロックを表し、文末にセミコロンが必要です。Python の動的型付けや JavaScript の柔軟さに慣れていると最初は窮屈ですが、コンパイル時にバグが発見できる安全性がメリットです。
Q. コードが動かないときに最初に見るべき場所は?
A. コンパイルエラーは行番号とエラー種別(cannot find symbol、incompatible types など)が表示されます。実行時例外はスタックトレースの最初の at ... が原因行です。IDE(IntelliJ / VS Code)の警告も丁寧に潰すと、半分のバグは未然に防げます。
Q. Java の習得後に学ぶべき技術は何ですか?
A. 基本構文を抑えたら java-intermediate(コレクション / ジェネリクス / Stream / 例外)に進み、Spring Boot や Web 開発に展開するのが王道です。クラウド時代は Kotlin / Scala への展開も視野に入りますが、まずは Java 標準を固めるのが効率的です。
次のレッスン
次は コメントを書く で、メソッドの引数で受け取った名前と年齢を文字列連結し、自己紹介の文を組み立てる練習 を学びます。
事前確認 — 進む前に次の 3 つができることを確認しましょう。
- 変数で自己紹介 の要点を自分の言葉で説明できる
- このレッスンの最小コード (または操作手順) を見ずに書ける
- 練習問題やクイズで間違えた箇所を読み直して理解した
理解度チェック (30 秒)
Q. 変数で自己紹介 とは何か、1 文で説明してください。
A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。
関連レッスン
要件
- Solution クラスに public static String introduceMyself(String name, int age) を実装する
- 引数 name と age を使い、"私は " + age + " 歳の" + name + "です。" の形式で文字列を組み立てて return する
- 半角スペースの位置 (age の前後) を間違えないこと
入出力例
test-cases.txt
introduceMyself("太郎", 25) → "私は 25 歳の太郎です。"
introduceMyself("花子", 30) → "私は 30 歳の花子です。"
introduceMyself("Bob", 18) → "私は 18 歳のBobです。"