我正在为一个学校作业编写一个程序,在那里我创建一个体育比赛。
在创建参与者的方法中,我们应该执行一些输入验证(不能为null或为空)。但我无法让它发挥作用。我将参与者保存在一个ArrayList中,参与者应该有一个firstname
,lastname
并且属于一个团队。
我在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作为对象,或者我可以垃圾邮件空间/输入直到输入一个单词。这与我想要实现的目标相反
答案 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) )
换句话说:只需让用户输入新名称;直到有一个被接受!