変数を使った自己紹介
相手が変わるたびにメソッドを増やせない
ここまでのメソッドは、決まった文字列をそのまま返すだけでした。ところが挨拶文は、相手によって中身が変わります。太郎さん用、花子さん用、Bob さん用とメソッドを増やしていたら、いつまでも終わりません。
変わるところだけを外から受け取れば、メソッドは 1 つで済みます。その受け取り口が 引数 です。カッコの中に「型 名前」を並べて宣言します。
Java
public class Label {
public static String priceTag(String item, int price) {
return item + " は " + price + " 円です。";
}
}(String item, int price) は「文字列を受け取る item という口と、整数を受け取る price という口がある」という宣言です。メソッドの中では、すでに値が入った変数として使えます。自分で代入する必要はありません。
呼ぶ側が値を差し替えるだけで、文の形は使い回せます。
Java
priceTag("りんご", 150); // "りんご は 150 円です。"
priceTag("みかん", 98); // "みかん は 98 円です。"+ の右に数を置くと、数のほうが文字になる
+ は、左右のどちらかが文字列なら「つなぐ」働きをします。このとき、もう一方が int でも自動的に文字列へ直してからつなぎます。だから price を "" で囲んだり、何か変換用のメソッドを呼んだりする必要はありません。
Java
int stock = 3;
String message = "残り " + stock + " 個"; // "残り 3 個"stock が 3 でも 120 でも、そのまま文の中に収まります。
数どうしの足し算と記号が同じなので、そこだけ気をつけてください。
1 + 2は3ですが、"" + 1 + 2は左から順につながって"12"になります。
半角スペースは 1 個ずつ数える
テストは期待した文字列と 1 文字ずつ照らし合わせます。落ちる原因のほとんどは文法ではなく、スペースの数と位置です。
上の " は " を "は" と書いてしまえば りんご は 150 円です。 が りんご150円です。 に変わり、当然テストは通りません。スペースを文字として意識しにくいので、期待される文字列を紙かコメントに書き出して、区切りに印を付けてから組み立てるのが確実です。
引数の順番の取り違えも同じくらい多い失敗です。呼び出す側と宣言する側で並びが食い違うと、String の口に整数を渡すことになり、その場でコンパイルエラーになります。
やってみよう
introduceMyself(String name, int age) を完成させて、私は 25 歳の太郎です。 の形の文字列を返してください。
nameとageを+でつなぎ、間の日本語を文字列リテラルとして挟む25の前後にそれぞれ半角スペースが 1 個ずつ入ることを確かめる- 実行して、
太郎, 25以外の 2 件のテストも通ることを見る
つなぐのは + です。, はメソッドの引数を区切るためだけの記号なので、return の中で使うと文法エラーになります。
要件
- Solution クラスに public static String introduceMyself(String name, int age) を実装する
- 引数 name と age を使い、"私は " + age + " 歳の" + name + "です。" の形式で文字列を組み立てて return する
- 半角スペースの位置 (age の前後) を間違えないこと
入出力例
introduceMyself("太郎", 25) → "私は 25 歳の太郎です。"
introduceMyself("花子", 30) → "私は 30 歳の花子です。"
introduceMyself("Bob", 18) → "私は 18 歳のBobです。"