1

通常の文型でスペースが生成されるため、文字列の説明でコンソールがクラッシュします。私はこれがなぜ起こるのかについてのガイダンスを探しています。さらに、これを間違った方法で行っている場合は、どのようにアプローチする必要がありますか。

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    System.out.println("-/- Job ticket  -/-");
    Scanner MyScanner = new Scanner (System.in);

    String FirstName;
    String LastName;
    String Phone;
    String Address;
    String Description;
    int ticketNumber;
    int orderMonth ;
    int orderDay;
    int orderYear;
    int requestedDay;
    int requestedMonth;
    int requestedYear;

    System.out.println("First Name = ?");
    FirstName = MyScanner.next();
    System.out.println("Last Name = ?");
    LastName = MyScanner.next();
    System.out.println("Phone = ?");
    Phone = MyScanner.next();
    System.out.println("Address = ?");
    Address = MyScanner.next();
    System.out.println("Description = ?");
    Description = MyScanner.next();
    System.out.println("Ticket = ?");
    ticketNumber = MyScanner.nextInt();
    System.out.println("Order Date Month = ?");
    orderMonth = MyScanner.nextInt();
    System.out.println("Order Date Day");
    orderDay = MyScanner.nextInt();
    System.out.println("Order Date Year");
    orderYear = MyScanner.nextInt();
    System.out.println("Requested Date Month");
    requestedMonth = MyScanner.nextInt();
    System.out.println("Requested Date Day");
    requestedDay = MyScanner.nextInt();
    System.out.println("Requested Date Year");
    requestedYear = MyScanner.nextInt();

    System.out.println("=====================================================");
    System.out.print("Ticket :   ");
    System.out.println(ticketNumber);
    System.out.print("Customer:   ");
    System.out.print(FirstName);
    System.out.print(" ");
    System.out.println(LastName);
    System.out.print("Home Phone: ");
    System.out.println(Phone);
    System.out.print("Order Date: ");
    System.out.print(orderMonth);
    System.out.print('/');
    System.out.print(orderDay);
    System.out.print('/');
    System.out.println(orderYear);
    System.out.print("Requested Date:   ");
    System.out.print(requestedMonth);
    System.out.print('/');
    System.out.print(requestedDay);
    System.out.print('/');
    System.out.println(requestedYear);
    System.out.println("-----------------------------------------------------");
    System.out.println("Address");
    System.out.println(Address);
    System.out.println("-----------------------------------------------------");
    System.out.println("Description");
    System.out.println(Description);
    System.out.println("=====================================================");
    System.out.println();
   }
}
4

1 に答える 1

0

ここであなたのコードに問題があります。

Scanner.next() を使用すると、Scanner は次の空白 " " を探し、その空白の前のすべてのテキストを返します。

これは、 Scanner クラスの区切り記号の概念によるもので、デフォルトの区切り記号は「空白または次の行」です (区切り記号について調べたい場合があります)。

区切り文字はどのように機能しますか?

例: 入力は「Hello World\r\n」です

Scanner.next() を呼び出すと、Scanner は空白を見つけて、それ以前のすべてを返すので、"Hello" が返されます。Scanner.next() を再度呼び出すと、Scanner は \r\n (次の行) を見つけて、それより前のすべてを返すので、"World" が返されます。

スキャナは、すべての入力の読み取りが終了したときにのみ、新しいユーザー入力を求めるプロンプトを表示します。

したがって、コードの場合、次のようになります。

Address = MyScanner.next();
System.out.println("Description = ?");
Description = MyScanner.next();
System.out.println("Ticket = ?");

Address の入力が「123 ABC Avenue」の場合、Address は入力「123」のみを取得しますが、Description はまだ空ではない入力から値「ABC」を自動的に取得します。

したがって、プログラムが説明ユーザー プロンプトを「スキップ」しているように見えることがわかります。

ユーザー入力全体を Scanner から引き出したい場合は、 Scanner.next() の代わりに Scanner.nextLine() メソッドを使用する必要があります。

于 2012-06-08T03:17:14.290 に答える