はじめに
前回の記事 #2 では nextLine() で「一行を読み取る方法」を学習しました。
ここから一歩進んで、文字で受け取った入力を安全に数値へ変換 する方法を学びます。
今日のゴール
- 文字列で受けてから
Integer.parseIntやDouble.parseDoubleで数値に変える。 - まちがって入力されたら やさしく聞き直すループ を書ける。
3ステップ
- 入力はまず
nextLine()で文字として受ける。 -
trim()して余計な空白を落とす。 -
try { パース } catch { メッセージを出して聞き直し }。
最小コード(コピペOK)
import java.util.Scanner;
public class Main {
private static final Scanner SC = new Scanner(System.in);
public static void main(String[] args) {
int level = askInt("レベル(整数)");
double weight = askDouble("体重kg(小数可)");
System.out.printf("記録: level=%d weight=%.1fkg%n", level, weight);
}
static int askInt(String label) {
while (true) {
System.out.print(label + "> ");
String s = SC.nextLine().trim();
try {
return Integer.parseInt(s);
} catch (NumberFormatException e) {
System.out.println("整数で入力してください(例: 42)。");
}
}
}
static double askDouble(String label) {
while (true) {
System.out.print(label + "> ");
String s = SC.nextLine().trim();
try {
return Double.parseDouble(s);
} catch (NumberFormatException e) {
System.out.println("小数で入力してください(例: 6.5)。");
}
}
}
}
よくあるつまずきポイント!
-
カンマや単位を混ぜない:
1,234や6.5kgはそのままでは変換できません。 -
全角数字で入力しない:
123はエラーになります。 -
小数点の表記に注意:小数点は
.(ドット)を使います(3.14)。 - 範囲チェック:値が正しいとは限りません(例:レベルは 1 ~ 100など)
ピカチュウ例:レベルと体重を安全に記録
import java.util.Scanner;
public class Pokedex {
private static final Scanner SC = new Scanner(System.in);
public static void main(String[] args) {
int level = askInt("レベル(1以上の整数)");
while (level < 1) {
System.out.println("1以上でお願いします。");
level = askInt("レベル(1以上の整数)");
}
double weight = askDouble("体重kg(小数可)");
System.out.printf("記録: ピカチュウ level=%d weight=%.1fkg%n", level, weight);
}
static int askInt(String label) {
while (true) {
System.out.print(label + "> ");
String s = SC.nextLine().trim();
try {
return Integer.parseInt(s);
}catch (NumberFormatException e) {
System.out.println("整数で入力してください。");
}
}
}
static double askDouble(String label) {
while (true) {
System.out.print(label + "> ");
String s = SC.nextLine().trim();
try {
return Double.parseDouble(s);
} catch (NumberFormatException e) {
System.out.println("小数で入力してください。");
}
}
}
}
あとがき
これで 数字を安全に受け取る基本 ができました。
次回 #4 は、多くの人がハマる 「改行問題」(nextInt() のあとに nextLine() が
空になる)を、原因からやさしく解決します。
💬 コメント・フィードバック歓迎!
「この章わかりやすかった!」
「これ表現まちがってない?」
「次は○○をやってほしい!」などなど、
お気軽にコメントで教えてくださいね!