16
import java.util.Scanner;
class MyClass
{
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);
        int employeeId, supervisorId;
        String name;
        System.out.println("Enter employee ID:");
        employeeId = scanner.nextInt();
        System.out.println("Enter employee name:");
        name = scanner.next();
        System.out.println("Enter supervisor ID:");
        supervisorId = scanner.nextInt();
    }
}

名と姓を入力しようとしたときに、この例外が発生しました。

Enter employee ID:
101
Enter employee name:
firstname lastname
Enter supervisor ID:
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at com.controller.Menu.<init>(Menu.java:61)
    at com.tests.Employeetest.main(Employeetest.java:17)

しかし、名前だけを入力すると機能します。

Enter employee ID:
105
Enter employee name:
name
Enter supervisor ID:
501

私が望むのは、 asnameまたは asで指定されているかどうかにかかわらず、完全な文字列を読み取ることですfirstname lastname。ここで何が問題なのですか?

4

4 に答える 4

26
Scanner scanner = new Scanner(System.in);
int employeeId, supervisorId;
String name;
System.out.println("Enter employee ID:");
employeeId = scanner.nextInt();
scanner.nextLine(); //This is needed to pick up the new line
System.out.println("Enter employee name:");
name = scanner.nextLine();
System.out.println("Enter supervisor ID:");
supervisorId = scanner.nextInt();

nextInt()新しい行を取得しなかったため、呼び出しは問題でした (Enter キーを押したとき)。scanner.nextLine()そのため、その後に呼び出すと機能します。

于 2013-07-17T04:41:49.183 に答える
1

交換:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.next());

と:

System.out.println("Enter EmployeeName:");
                 ename=(scanner.nextLine());

これは、 next() が次のトークンのみを取得し、スペースがトークン間の区切り文字として機能するためです。これは、スキャナが入力「firstname lastname」を 2 つの別個のトークンとして読み取ることを意味します。したがって、あなたの例では、ename は firstname に設定され、スキャナーは SupervisorId を lastname に設定しようとしています。

于 2013-07-17T04:45:57.550 に答える
0

nextInt に null 値を入力しています。null 値を指定すると失敗します...

コードに null チェックを追加しました

このコードを試してください:

import java.util.Scanner;
class MyClass
{
     public static void main(String args[]){

                Scanner scanner = new Scanner(System.in);
                int eid,sid;
                String ename;
                System.out.println("Enter Employeeid:");
                     eid=(scanner.nextInt());
                System.out.println("Enter EmployeeName:");
                     ename=(scanner.next());
                System.out.println("Enter SupervisiorId:");
                    if(scanner.nextLine()!=null&&scanner.nextLine()!=""){//null check
                     sid=scanner.nextInt();
                     }//null check
        }
}
于 2013-07-17T04:44:13.533 に答える