データ型の使い分け
「数」だけでは、箱を選べない
前回は整数を入れる int だけを使いました。しかし身長は 170.5 のように小数になりますし、「学生かどうか」は数ですらありません。Java は入れる前に箱の種類を決めさせるので、扱いたい値ごとに型を選ぶ必要があります。
今回の課題で使うのは次の 4 つです。
int— 整数。年齢、個数、点数double— 小数を含む数。身長、体重、割合boolean—trueかfalseの 2 つだけ。「学生か」「在庫があるか」String— 文字列。名前、住所
書き方はどれも 型 名前 = 値; で共通です。
Java
String title = "初めての Java";
int pages = 320;
double rating = 4.5;
boolean borrowed = false;String だけ先頭が大文字なのは、これがクラスだからです。int double boolean は Java にもとから組み込まれた基本型で、すべて小文字で書きます。
158 と渡したのに、158.0 と出てくる
double の箱は、中身が割り切れる数でも小数として持ち続けます。だから整数を渡しても、文字列にした瞬間に .0 が付いて出てきます。
Java
double weight = 60;
System.out.println(weight); // 60 ではなく 60.0これは不具合ではなく double の性質です。テストが 158.0 を期待しているのに 158 しか出ない、と悩んだときは、その値が int のままになっていないかを疑ってください。逆に、期待値に .0 が付いているなら、そこは double を通っている証拠です。
+ で文字列とつなぐと、int も double も boolean も自動的に文字になります。true は "true"、4.5 は "4.5" です。
Java
String label = title + " (" + pages + "ページ)";
// "初めての Java (320ページ)"型が合わないと、動かす前に止まる
型を間違えたときは実行前にコンパイラが止めます。よくあるのは次の 2 つです。
int に小数を入れようとする場合、int score = 80.5; は incompatible types: possible lossy conversion from double to int になります。.5 を捨てるかどうかを Java が勝手に決めないための停止です。
boolean に文字列や数を入れようとする場合も同じです。boolean ok = "true"; も boolean ok = 1; も通りません。true と false はキーワードそのもので、クォートで囲む必要はありません。
incompatible typesと出たら、まず左の型と右の値を並べて見比べてください。9 割はこの 2 つのどちらかです。
やってみよう
summarize(String name, int age, double height, boolean isStudent) を完成させ、太郎/20歳/170.5cm/学生:true の形の文字列を返してください。
- 4 つの引数を
+でつなぎ、間に区切りの文字列を挟む /と学生:のコロンは半角で書く。全角の/:は別の文字として扱われる170.5のような小数がそのまま出ること、158を渡した回は158.0になることを実行して確かめる
isStudent は true か false がそのまま文字になるので、if で場合分けする必要はありません。
要件
- Solution クラスに public static String summarize(String name, int age, double height, boolean isStudent) を実装する
- 引数 4 つを
name + "/" + age + "歳/" + height + "cm/学生:" + isStudentの形式で連結して return する - 区切り文字
/とコロン:は半角を使う (全角は不可)
入出力例
summarize("太郎", 20, 170.5, true) → "太郎/20歳/170.5cm/学生:true"
summarize("花子", 30, 158, false) → "花子/30歳/158.0cm/学生:false"
summarize("Bob", 25, 180.2, true) → "Bob/25歳/180.2cm/学生:true"