2013-07-17 16 views
13
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:"); 
         sid=(scanner.nextInt()); 
     } 
} 

mam wyjścia, starając się wstawić tenJak odczytać ciągi ze skanera w konsoli Aplikacja JAVA?

Enter Employeeid: 
101 
Enter EmployeeName: 
firstname lastname 
Enter SupervisiorId: 
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) 

ale jego praca na tym

Enter Employeeid: 
105 
Enter EmployeeName: 
name 
Enter SupervisiorId: 
501 

Co chcę jest, że muszę przeczytać cały ciąg, czy jest on podany jako name lub jako firstname lastname ..Eg :-(john -> jest akceptowane przez scanner.next(); ale john carter nie jest akceptowane przez scanner.next();)

+3

Zmień 'scanner.next()' na 'scanner.nextLine()'. –

+0

'sid = (scanner.nextInt()); 'oczekuje, że int, a nie ciąg, dlatego działa z' 501' – fmodos

+0

jego nie działa @matt ball – 09Q71AO534

Odpowiedz

20
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(); 
       scanner.nextLine(); //This is needed to pick up the new line 
       System.out.println("Enter EmployeeName:"); 
       ename=scanner.nextLine(); 
       System.out.println("Enter SupervisiorId:"); 
       sid=(scanner.nextInt()); 
     } 
} 

Wywołanie nextInt() było problemem, ponieważ nie odebrało nowej linii (po naciśnięciu klawisza Enter). Zatem wywołanie metody scanner.nextLine() po wykonaniu tej czynności.

1

Co możesz zrobić, to użyć ogranicznika jako nowej linii. Do momentu naciśnięcia klawisza Enter będziesz mógł odczytać go jako ciąg znaków.

Scanner sc = new Scanner(System.in); 
sc.useDelimiter(System.getProperty("line.separator")); 

Mam nadzieję, że to pomoże.

0

Wchodzisz wartość null do nextInt, zakończy się niepowodzeniem, jeśli dasz wartość null ...

dodałem null czek na kawałek kodu

Spróbuj ten kod:

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 
     } 
} 
1

Wymienić:

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

z:

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

Dzieje się tak dlatego, że next() pobiera tylko następny token, a spacja działa jako ogranicznik między tokenami. Rozumiem przez to, że skaner odczytuje dane wejściowe: "imię nazwisko" jako dwa oddzielne tokeny. Tak więc w twoim przykładzie, ename zostanie ustawione na imię, a skaner spróbuje ustawić supervisorId na nazwisko

+0

'scanner.nextLine(); // Jest to potrzebne do pobrania nowej linii; System.out.println ("Enter EmployeeName:"); ename = scanner.nextLine(); ' – 09Q71AO534

Powiązane problemy