2014-10-18 2 views
3

Следующий метод Java предполагает принять строку (имя человека) от пользователя с помощью клавиатуры, найти это имя в массиве с именем name[] и удалить имя этого человека из массива (по назначая name[i] = "INVALID").NoSuchElementException при использовании сканера для чтения ввода

код пытается принять строку ввода (имя человека), используя Scanner объект класса del_name, но я получаю NoSuchElementException в заявлении

s=del_name.next(); 

т.е. 4 заявления от верхней части.

Буду очень благодарен, если кто-то может дать решение, а также объяснить, почему этот код не работает. (Спасибо)

void Deletee() 
{ 


     Scanner del_name=new Scanner(System.in); 

     String s; 

     System.out.println("Enter the name to be deleted"); 

     s=del_name.next(); // causing NoSuchElementException 

     int i=0; 

    /* find position in which the name occurs using while-loop below */ 


     while(!s.equalsIgnoreCase(name[i]) && i<count) 

      i++ ; // increment i to search in next array index 



     if(i<count) 
     { 
      name[i]="INVALID"; 

      count--; 

      System.out.println("Deletion Successful"); 
     } 
     else 
     { 

      System.out.println("No such person exist"); 

     } 

     del_name.close(); 


} 

ответ

1

Изменение .next() в .nextLine().

Scanner del_name=new Scanner(System.in); 

String s; 

System.out.println("Enter the name to be deleted"); 

s=del_name.nextLine(); 

Scanner.next() возвращает независимо от входного тока, даже если его нет (что дает вам вашу ошибку). Scanner.nextLine() пропускает текущую строку и возвращает пропущенную часть.

0

Попробовать,

del_name.nextLine() 

Использование next() будет возвращать только то, что идет перед пробелом. nextLine() автоматически переводит сканер вниз после возврата текущей строки.

next(): Находит и возвращает следующий полный токен из этого сканера.
nextLine(): Адаптирует этот сканер к текущей строке и возвращает вход, который был пропущен.

0

Код, который вы отправили, не генерирует исключение как есть. Возможно, вы сделали что-то до этого вызова метода, вызвавшего это. В качестве доказательства, запустите этот код:

public class Test { 

    static String[] name = new String[] {"AAA", "BBB", "CCC"}; 

    static void deletee() { 

     Scanner delName = new Scanner(System.in); 
     System.out.println("Enter the name to be deleted"); 
     String s = delName.next(); 

     boolean found = false; 
     for (int i = 0; i < name.length; i++) { 
      if (name[i].equalsIgnoreCase(s)) { 
       name[i] = "INVALID"; 
       System.out.println("Deletion Successful"); 
       found = true; 
       break; 
      } 
     } 
     if (!found) 
      System.out.println("No such person exist"); 
     delName.close(); 
    } 

    public static void main(String[] args) { 

     deletee(); 
     for (int i = 0; i < name.length; i++) 
      System.out.print(name[i] + ", "); 
    } 
} 

Примечания:

  • имена методов должны начинаться с строчными.
  • Не конечные переменные не должны использовать символы подчеркивания, только верхние строчки, где начинается новое слово.
  • Я переписал механизм поиска чего-то более интуитивного, хотя есть еще много способов сделать это.
  • Хорошая работа по закрытию сканера.
Смежные вопросы