JavaのScanner
を使って入力を処理するとき、「改行の消費」という言葉を耳にしたことがある方もいるかもしれません。
この記事では、初心者でも理解できるように、改行の消費が必要な理由とその解決方法について解説します!😊
改行の消費ってなに?
プログラムにユーザー入力を求めるとき、数字(例えば123
)や文字列(例えばHello
)を入力しますよね?
JavaのScanner
を使うと、数値入力(nextInt()
)や文字列入力(nextLine()
)を処理できます。
しかし、数値入力の後に文字列を入力しようとすると、「改行」の扱いで問題が発生する場合があります。これが「改行の消費」の原因です。
具体例: 問題が発生するコード
以下のコードを見てください。
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("数字を入力してください: ");
int number = scanner.nextInt(); // ユーザーが「123」と入力してEnterを押す
System.out.print("文字列を入力してください: ");
String text = scanner.nextLine(); // 文字列を入力する前にスキップされる!
System.out.println("入力された数字: " + number);
System.out.println("入力された文字列: " + text);
}
}
実行例
数字を入力してください: 123
文字列を入力してください: 入力された数字: 123
入力された文字列:
なぜ文字列がスキップされるの?
-
nextInt()
の挙動-
nextInt()
は 数字だけを読み取ります。その後に入力される改行(Enter)は無視されず、入力バッファに残ります。
-
-
nextLine()
の挙動- 次に呼び出された
nextLine()
が、この残った改行(Enter)を読み取ります。そのため、文字列入力のチャンスがなくなり、結果的に空文字(""
)が返されます。
- 次に呼び出された
解決策: 改行を明示的に消費する
この問題を解決するには、nextInt()
の後に scanner.nextLine()
を挿入して改行を消費 します。
修正したコードはこちらです👇
import java.util.Scanner;
public class Example {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("数字を入力してください: ");
int number = scanner.nextInt(); // 数字だけを読み取る
scanner.nextLine(); // 改行を消費!
System.out.print("文字列を入力してください: ");
String text = scanner.nextLine(); // 文字列を正しく読み取れる
System.out.println("入力された数字: " + number);
System.out.println("入力された文字列: " + text);
}
}
実行結果
数字を入力してください: 123
文字列を入力してください: Hello
入力された数字: 123
入力された文字列: Hello
改行の消費のポイント
-
nextInt()
やnextDouble()
などの数値入力は改行を消費しない- 数値だけ読み取るので、改行(Enter)は残ります。
-
nextLine()
は改行を含めてすべて読み取る- 残った改行文字を最初に拾ってしまうため、次の入力をスキップします。
そのため、数値入力後に文字列入力をする場合は 必ずscanner.nextLine()
を挿入 して、残った改行を消費しましょう。
簡単なまとめ
-
問題:
nextInt()
の後にnextLine()
を使うと改行が残り、文字列がスキップされる。 -
解決策: 数値入力の後に
scanner.nextLine()
を挿入して改行を消費する。
改行の消費をマスターして快適なプログラム作りを!
Scanner
を使ったユーザー入力処理は、Javaプログラムの基本です。改行の消費を理解すれば、スムーズにユーザー入力を扱えるようになります。ぜひ、この知識を使ってプログラムを作成してみてください!
質問や気になる点があれば、コメントで教えてくださいね! 😊
💡 他にも知りたいJavaの基本知識があればリクエストをどうぞ!