Java 验证Person类中的输入时出现问题

Java 验证Person类中的输入时出现问题,java,oop,arraylist,input,do-while,Java,Oop,Arraylist,Input,Do While,我正在为一个学校作业写一个程序,在那里我创建了一个体育比赛。 在创建参与者的方法中,我们应该执行一些输入验证(不能为null或空)。但我不能让它工作。我正在将参与者保存在ArrayList中,参与者应具有名,姓,并且属于一个团队 我在stackoverflow上尝试了许多解决方案,但似乎都不起作用。 目前,我使用if-else: Participant ParticipantArr = new Participant(); String firstNameType = keyb

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

我在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中,或者我可以在输入单词之前发送空格/enter。这与我在这里想要实现的目标正好相反:

firstNameType = keyboard.nextLine();
if (firstNameType.trim().isEmpty()) {
当nextLine()返回null时,这必须导致NullPointerException

我的建议是:做如下事情:

在参与者类中,您可以添加:

public static boolean isValidFirstName(String name) {
  if (name == null || name.isEmpty() || name.trim().isEmpty()) {
    return false;
  }
  return true;
}
从你的循环中调用它!换句话说:将验证代码放在一个中心位置;而不是到处抄袭

针对你的实际问题;很难说;但一般来说,当使用扫描器时,这些类有一整套类似的方法,可以用来检查是否有可用的输入

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

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

换句话说:只要让你的用户输入新的名字;直到有一个被接受

“我不能让它工作”确切地说是什么意思?你得到的结果是什么,你想要的结果是什么。同时给我们看一个@Jens抱歉,程序只是将“null”作为对象添加到arraylist中,或者我可以在输入单词之前发送空格/输入。这与我试图实现的目标正好相反。使用调试器来找出发生了什么事情。它确实有助于isEmpty();你能强迫一个NullPointerException去尝试它吗?我不确定你的意思-重点是:你可以随时编写测试方法来测试你的“生产”代码;例如,使用JUnit。就你目前的情况而言;我认为对keyboard.nextLine()的调用通常不应返回null,但是,我们不知道真正的类是什么,以及发生了什么,因为您的总体输入没有涵盖这些方面;只要记住这个答案,就可以表达你的感激之情;所以有一天,当你们获得了投票权,你们也可以回来投票;-)