0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaで「改行の消費」が必要な理由をわかりやすく解説!

Posted at

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
入力された文字列: 

なぜ文字列がスキップされるの?

  1. nextInt()の挙動

    • nextInt()数字だけを読み取ります。その後に入力される改行(Enter)は無視されず、入力バッファに残ります。
  2. 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

改行の消費のポイント

  1. nextInt()nextDouble() などの数値入力は改行を消費しない
    • 数値だけ読み取るので、改行(Enter)は残ります。
  2. nextLine() は改行を含めてすべて読み取る
    • 残った改行文字を最初に拾ってしまうため、次の入力をスキップします。

そのため、数値入力後に文字列入力をする場合は 必ずscanner.nextLine()を挿入 して、残った改行を消費しましょう。


簡単なまとめ

  • 問題: nextInt() の後に nextLine() を使うと改行が残り、文字列がスキップされる。
  • 解決策: 数値入力の後に scanner.nextLine() を挿入して改行を消費する

改行の消費をマスターして快適なプログラム作りを!

Scannerを使ったユーザー入力処理は、Javaプログラムの基本です。改行の消費を理解すれば、スムーズにユーザー入力を扱えるようになります。ぜひ、この知識を使ってプログラムを作成してみてください!

質問や気になる点があれば、コメントで教えてくださいね! 😊


💡 他にも知りたいJavaの基本知識があればリクエストをどうぞ!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?