1. ホーム
  2. java

[解決済み] Javaが行を飛ばす(スキャナの文字列 ?)【重複

2022-02-16 04:56:20

質問

私はJavaを勉強しているのですが、まだあまり進んでいないようで、なぜかわかりませんが、Javaが一行飛ばしているようなのです。私はすべてのページからのコードが本当に必要だとは思わないので、私はちょうど最初のページとそれを使用したときに得られる結果を置くことにします。ありがとうございます。

import java.util.Scanner;

public class First {
    public static void main(String args[]){
        Scanner scanz = new Scanner(System.in);
        System.out.println("Hello, please tell me your birthday!");
        System.out.print("Day: ");
        int dayz = scanz.nextInt();
        System.out.print("Month: ");
        int monthz = scanz.nextInt();
        System.out.print("Year: ");
        int yearz = scanz.nextInt();
        System.out.println("Now, tell me your name!");
        System.out.print("Name: ");
        String namez = scanz.nextLine();
        Time timeObject = new Time(dayz,monthz,yearz);
        Second secondObject = new Second(namez,timeObject);

        System.out.println("\n\n\n\n\n" + secondObject);
    }
}

行をスキップします

        String namez = scanz.nextLine();

コンソールの出力です。(誕生日の部分は失礼、他のものです)

Hello, please tell me your birthday!
Day: 34
Month: 234
Year: 43
Now, tell me your name!
Name: 




My name is  and my birthday is 00/00/43

名前を指定する機会がなく、そのままスキップして名前をnullとして受け取ってしまいます。なぜなのか、どなたか教えてください。私はJavaを学びたいのですが、この小さな悩みが私の道を阻んでいるのです。

ありがとうございます。

解決方法は?

問題は、nextLineが行内の任意の文字を取得してしまうことと、上記のスキャナ入力の際に、nothing(改行文字)が残ってしまうことです。

このように2台のスキャナーを背中合わせにすると解決します。

System.out.print("Name: ");
scanz.nextLine();
String namez = scanz.nextLine();

使うだけ。

String namez = scanz.next();

も動作しますが、この場合、名前は一語に限定されます。(別名:ファーストネームのみ)