Java 验证Person类中的输入时出现问题
我正在为一个学校作业写一个程序,在那里我创建了一个体育比赛。 在创建参与者的方法中,我们应该执行一些输入验证(不能为null或空)。但我不能让它工作。我正在将参与者保存在ArrayList中,参与者应具有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
名
,姓
,并且属于一个团队
我在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,但是,我们不知道真正的类是什么,以及发生了什么,因为您的总体输入没有涵盖这些方面;只要记住这个答案,就可以表达你的感激之情;所以有一天,当你们获得了投票权,你们也可以回来投票;-)