ここから本文です

以下のJavaコードでは、first name, middle name, last nameを受取り、表示するプ...

gif********さん

2019/1/822:14:12

以下のJavaコードでは、first name, middle name, last nameを受取り、表示するプログラムです。

但し、Middle nameが空欄の場合は、入力を飛ばし、次のLast nameの入力へ移りたいのですが、下記コードを実行すると、Middle nameを空欄のままにし、Enterを押すと、いつまでも入力待受のままになってしまいます。
解決方法があれば、どのように書き直したら良いか、ご回答お願いします。

import java.util.Scanner;

class TestScan {
public static void main(String[] args) {
while(true) {
Scanner scanner = new Scanner(System.in);
System.out.print("Tell us your first name: ");
String scanFN = scanner.next();
System.out.println(scanFN);
System.out.print("Tell us your middle name: ");
String scanMN = scanner.next();
if (scanMN.isEmpty()) {
continue;
} else {
System.out.println(scanMN);
}
System.out.print("Tell us your last name: ");
String scanLN = scanner.next();
System.out.println(scanLN);
break;
}

}
}

閲覧数:
55
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

とみおさん

2019/1/901:37:44

Scanner#next()は、デフォルトのままでは空欄(スペース)を読み込みません。
そのため、空欄(スペース)でエンターを押しても、「まだ入力が行われていない」と判断され、入力受付状態を維持します。
対策は以下2種類が考えられます
・Scanner#next()でスペースを認識するように設定する
・Scanner#nextLine()を使用する

前者はScanner#next()の仕様を把握しておかないと、
何してるのかわからいと思うので
簡単に実現できる後者を利用をお勧めします。
Scanner#next()をScanner#nextLine()に変更してみてください。
Scanner#nextLine()は、コンソールからの入力を一行受付ます。
そのため、スペースのみでも認識することができます。

  • 質問者

    gif********さん

    2019/1/920:51:19

    ご回答ありがとうございます。

    以下のように変更し、コンパイルし、実行してみると、下記のような表示がされ、何も入力せずEnterを押すと、まだ入力受付のままになってしまいました。
    お手数ですが、何かアイディアがあればご教授頂けますでしょうか。

    System.out.print("Tell us your middle name: ");
    String scanMN = scanner.nextLine();
    if (scanMN.isEmpty()) {
    continue;
    } else {
    System.out.println(scanMN);
    }

    ーーーーーー
    Tell us your first name: Taro
    Yosuke
    Tell us your middle name: Tell us your first name:


  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/1/10 22:40:03

ご丁寧に対応いただきありがとうございました!

ベストアンサー以外の回答

1〜1件/1件中

ii3********さん

2019/1/923:31:14

やるとしたらこう。
scannerはループの外で宣言し、インスタンスを使い回す。
next()ではなくnextLine()を使う。

import java.util.Scanner;

class TestScan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print("Tell us your first name: ");
String scanFN = scanner.nextLine();
System.out.println(scanFN);
System.out.print("Tell us your middle name: ");
String scanMN = scanner.nextLine();
if (scanMN.isEmpty()) {
continue;
} else {
System.out.println(scanMN);
}
System.out.print("Tell us your last name: ");
String scanLN = scanner.nextLine();
System.out.println(scanLN);
break;
}
}
}
// giftfromtheworld q14201620389

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる