2017-01-12 3 views
0

Я пишу программу для школьного задания, где я создаю спортивное соревнование. В методе создания участника мы должны выполнить некоторую проверку ввода (не может быть пустой или пустой). Но я не могу заставить его работать. Я сохраняю участника в ArrayList, и участник должен иметь firstname, lastname и принадлежать команде.Ошибка ввода данных в класс Person

Я пробовал множество решений здесь, в stackoverflow, но ни один из них не работает. На данный момент я использую Условный еще:

Participant ParticipantArr = new Participant(); 

    String firstNameType = keyboard.nextLine(); 
    System.out.print("Firstname: "); 
    ParticipantArr.setFirstName(firstNameType); 

В Participant.java:

 public void setFirstName(String firstName) { 

    if (firstName == null || firstName.isEmpty()) { 
     System.out.println("The name is incorrect"); 
    } else { 
     this.firstName = firstName.substring(0, 1).toUpperCase() + firstName.substring(1).toLowerCase(); 
    } 
} 

Я также попробовал делать-то время с того же класса участника:

String firstNameType; 
    do { 
     System.out.print("Firstname: "); 
     firstNameType = keyboard.nextLine(); 
     if (firstNameType.trim().isEmpty()) { 
      System.out.println("The name cannot be empty!"); 

     } 
    } while (firstNameType.isEmpty() || firstNameType == null); 
    ParticipantArr.setFirstName(firstNameType); 

Я попытался изменить firstNameType == null на .equals(null), но он ничего не меняет.

Редактировать: извините, программа просто добавляет «null» в arraylist как объект или я могу спамить пробел/вводить, пока не будет введено слово. Что является противоположностью того, что я пытаюсь достичь

+1

Что означает «Я не могу заставить его работать» означает «точно»? – Phylogenesis

+0

Каков результат, который вы получите, и какой результат вы хотите. – Jens

+0

Также покажите нам [mcve] – Jens

ответ

0

здесь:

firstNameType = keyboard.nextLine(); 
if (firstNameType.trim().isEmpty()) { 

когда nextLine() возвращает нуль, это должно привести к NullPointerException.

Мое предложение: сделать что-то вроде:

В классе участника, добавьте:

public static boolean isValidFirstName(String name) { 
    if (name == null || name.isEmpty() || name.trim().isEmpty()) { 
    return false; 
    } 
    return true; 
} 

и называют, что от вашего в вашем цикле! Другими словами: у вас есть код подтверждения в one central место; вместо того, чтобы копировать повсюду.

Для вашей реальной проблемы; сложно сказать; но в целом при использовании сканера этот класс имеет целый набор методов, таких как hasNextLine(), которые можно использовать для . Проверьте, что есть действительно доступный вход!

Редактировать; более полное решение может выглядеть так:

String firstNameType = null; 
do { 
    System.out.print("Please enter first name: "); 
    firstName = keyboard.nextLine(); 
    } while (! Participant.isValidFirstName(firstName)) 

Другими словами: просто держите своего пользователя в новых именах; пока не будет принятого!

+0

Это помогло с isEmpty(); вы можете заставить исключение NullPointerException попробовать? – zkulltrail

+0

Я не уверен, что вы имеете в виду - дело в том, что вы всегда можете написать * тест ** методы для * теста * вашего «производственного» кода; например, с помощью JUnit. В вашем текущем случае; Я * думаю *, что этот вызов на клавиатуре.nextLine() обычно не возвращает null, но хорошо, мы ** не знаем, какой класс действительно и что происходит, поскольку ваш общий ввод не охватывает эти аспекты. – GhostCat

+0

Я переработал свой ответ; надеюсь, что теперь это будет более полезно. – GhostCat

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

  • Нет связанных вопросов^_^