ここから本文です

下記はJavaコードでFirst Name, Middle Name(あれば), Last Nameを受取り、

gif********さん

2019/1/1022:47:36

下記はJavaコードでFirst Name, Middle Name(あれば), Last Nameを受取り、

Middle NameがなければSystem.out.println(scanFN + " " + scanLN); でFirst NameとLast Nameのみを出力し、Middle NameがあればSystem.out.println(scanFN + " " + scanMN + " " + scanLN);を出力するようif文で定義したのですが、Middle Nameが無くてもSystem.out.println(scanFN + " " + scanMN + " " + scanLN);が使われているようで(First NameとLast nameの間のスペースが大きい)、First nameとLast nameのみの場合は(scanFN + " " + scanLN); で出力するように設定したのですが、解決方法がればご回答頂けますと幸いです。

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.nextLine();
System.out.println(scanFN);
System.out.print("Tell us your middle name: ");
String scanMN = scanner.nextLine();
if (scanMN.isEmpty()) {
;
} else {
System.out.println(scanMN);
}
System.out.print("Tell us your last name: ");
String scanLN = scanner.nextLine();
System.out.println(scanLN);
if (scanMN == null) {
System.out.println(scanFN + " " + scanLN);
} else {
System.out.println(scanFN + " " + scanMN + " " + scanLN);
}

break;
}

}
}

閲覧数:
39
回答数:
2

違反報告

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

プロフィール画像

カテゴリマスター

ikt********さん

2019/1/1100:40:34

既にご回答あるとおり、Scanner#nextLine() は
null 返しません。 何もタイプせず<Enter>キーだけ
のときは、ブランク文字列 "" を返します。
if 判定するなら String#isEmpty() にすべき。

あと、質問本旨とはズレるかもしれないけど。

1.
なぜ while ループ?
first, last はブランクだったら再入力求める... の
ためかもしれないけど、既に前便でご回答あるとおりで、
単一ループで continue しても first からになってしまう。
単一ループに3入力納める方法では、無理です。
再入力ループは、各入力毎にすべき。

2.
Scanner は最初から最後まで通して、
1インスタンスあれば済みます。
ループ内でnewする必要は、ない。


以下は、興味本位で書いてみたもの。
未学習要素があって ??? かもしれませんが、
ご参考まで。


import java.util.Scanner;
import java.util.NoSuchElementException;

class Foo {
    public static void main(String[] args) {
        new Foo().solve();
    }

    void solve() {
        System.out.println(
            String.join(" ",
                inputNotEmpty("Tell us your first name: "),
                input        ("Tell us your middle name: "),
                inputNotEmpty("Tell us your last name: ")
            ).replaceAll(" +", " ")
        );
    }

    String input(String prompt) {
        try {
            System.out.print(prompt);
            return in_.nextLine().trim();
        } catch (NoSuchElementException e) {
            System.exit(0);
            return null;
        }
    }
    String inputNotEmpty(String prompt) {
        String result;
        do {
            result = input(prompt);
        } while (result.isEmpty());
        return result;
    }

    private Scanner in_ = new Scanner(System.in);
}


実行結果:
C:\tmp>javac -version
javac 11.0.1

C:\tmp>javac Foo.java

C:\tmp>java Foo
Tell us your first name: John
Tell us your middle name:
Tell us your last name: Kennedy
John Kennedy

C:\tmp>java Foo
Tell us your first name: John
Tell us your middle name: F
Tell us your last name: Kennedy
John F Kennedy

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

  • 取り消す
  • キャンセル

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

2019/1/13 13:35:35

ご回答ありがとうございました!

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

1〜1件/1件中

shu********さん

2019/1/1023:51:21

最後のif判定でscanMNがnullかどうか判定していますが、scanMNはnullじゃないと思います。

おそらく空文字(””)が入っています。

なので、最後のif判定を以下に直せば期待通りになるかと思いますよ。

if (scanMN.equals(“”)) {

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

  • 取り消す
  • キャンセル

この質問につけられたタグ

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

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

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

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

閉じる

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

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

閉じる