无法验证Person类中的输入

时间:2017-01-12 13:30:56

标签: java oop arraylist input do-while

我正在为一个学校作业编写一个程序,在那里我创建一个体育比赛。 在创建参与者的方法中,我们应该执行一些输入验证(不能为null或为空)。但我无法让它发挥作用。我将参与者保存在一个ArrayList中,参与者应该有一个firstnamelastname并且属于一个团队。

我在stackoverflow上尝试了很多解决方案,但似乎都没有。 目前我使用了if-else:

    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 个答案:

答案 0 :(得分:0)

下面:

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

nextLine()返回null时,这必然会导致NullPointerException。

我的建议:做类似的事情:

在您的Participant课程中,您添加:

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

并在你的循环中调用它!换句话说:将验证码放在一个中央位置;而不是遍布整个地方。

针对您的实际问题;很难说;但一般来说,在使用扫描仪时,这些类有一整套方法,如hasNextLine(),可用于检查确实有一些输入可用!

编辑;更完整的解决方案可能如下所示:

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

换句话说:只需让用户输入新名称;直到有一个被接受!