2015-04-24 2 views
0

, когда я ввожу значение «Адам J» для моего имени, следующий выводится:Программа выходит смешно, когда письмо + пробел + буква вводится

Please enter student first name: Adam J 
Please enter student surname: Please select Subject Unit: 

Я хотел бы, чтобы отклонить это значение, как это было бы, если бы номер был введен. В идеале я не хочу, чтобы он принял его, если у него есть место в нем, поэтому он сказал бы «Пожалуйста, введите действительное имя».

case 1: 
       System.out.print("Please enter student first name: "); 
       firstName = scan.next(); 

       while(!firstName.matches("[-a-zA-Z]*")) 
       { 
        System.out.print("Please enter a valid first name: "); 
        firstName = scan.next(); 
       } 
       firstCap = firstName.substring(0,1).toUpperCase() + firstName.substring(1); 

    System.out.print("Please enter student surname: "); 
     lastName = scan.next(); 

     while(!lastName.matches("[-a-zA-Z]*")) 
     { 
      System.out.print("Please enter a valid surname: "); 
      lastName = scan.next(); 
     } 
     surCap = lastName.substring(0,1).toUpperCase() + lastName.substring(1); 

     System.out.print("Please select Subject Unit: "); 
     unit = scan.next(); 

Я запутался, почему: «Пожалуйста, введите фамилию студента: Пожалуйста, выберите Тема Раздел:» находятся на одной линии, а также.

Вы можете помочь? Thanks

+0

Ваши имена могут содержать символ '-' также. Я надеюсь, что его функция. –

+0

Пожалуйста, отметьте ответ как правильный, чтобы он мог помочь другим. – Pratik

+0

@ Рамеш-Х уходит в двойные названия – Adam

ответ

3

Метод next() извлекает следующий токен из потока, который по умолчанию разделен пробелами. Призыв к next() для первого имени потребляет только Adam. Следующий звонок next() потребляет J, оставив вас в третьем приглашении.

Вместо этого вы должны позвонить nextLine(), чтобы получить всю линию, так что Adam J потребляется все за firstName.

-1

Попробуйте сделать nextLine() вместо next().

0
case 1: 
       System.out.println("Please enter student first name: "); 
       firstName = scan.nextLine(); 

       while(!firstName.matches("[a-zA-Z]+")) 
       { 
        System.out.println("Please enter a valid first name: "); 
        firstName = scan.nextLine(); 
       } 
       firstCap = firstName.substring(0,1).toUpperCase() + firstName.substring(1); 

    System.out.println("Please enter student surname: "); 
     lastName = scan.nextLine(); 

     while(!lastName.matches("[a-zA-Z]+")) 
     { 
      System.out.println("Please enter a valid surname: "); 
      lastName = scan.nextLine(); 
     } 
     surCap = lastName.substring(0,1).toUpperCase() + lastName.substring(1); 

     System.out.println("Please select Subject Unit: "); 
     unit = scan.nextLine(); 

Я предполагаю, что дополнительное - в вашем регулярном выражении было непреднамеренным. Кроме того, ваше регулярное выражение должно проверять [a-zA-Z] +, а не [a-zA-Z] *, поскольку пустое имя мне кажется недействительным.

Смежные вопросы