我正在使用Scanner来获取用户输入。如果用户输入了名称,我将其添加到ArrayList
。如果用户没有输入名称,那么我想抛出异常,但我想继续获得答案的循环。
for(int i = 0; i < totalLanes; i++){
runArr.add(this.addRacer());
}
public static String addRacer() throws NullPointerException{
System.out.print("Enter a name for a racer: ");//Method uses try catch to catch a NullPointerException.
Scanner sc = new Scanner(System.in);
String rName = null;
try {
if(!sc.nextLine().isEmpty()){
rName = sc.nextLine();
}else{
throw new NullPointerException("name cannot be blank");
}
}
catch (NullPointerException e) {
System.out.println(e.toString());
System.out.print("Enter a name for a racer: ");
addRacer();
}
return rName;
}
提前致谢。
答案 0 :(得分:1)
问题是你读了两次输入。
我的意思是你的代码中有两个sc.nextLine()
方法调用。
试试这个:
String rName = sc.nextLine();
try {
if(rName.isEmpty()){
throw new NullPointerException("Name cannot be blank.");
}
}
答案 1 :(得分:0)
你不应该为此抛出异常。只需使用while循环:
String rName = sc.nextLine();
while (rName.isEmpty()) {
System.out.println("Name can't be blank. Try again.");
rName = sc.nextLine();
}
return rName;
在该循环之后,您可以确保变量中包含非空名称,并且可以使用该名称添加新的赛车。你不需要递归。
答案 2 :(得分:0)
您可以在案例中使用do{}while()
,这可能是更好的方法:
Scanner sc = new Scanner(System.in);
String rName;
do {
System.out.print("Enter a name for a racer: ");
rName = sc.nextLine();
try {
if (rName.isEmpty()) {
//throw and exception
throw new NullPointerException("name cannot be blank");
}
} catch (NullPointerException e) {
//print the exception
System.out.println(e.getMessage());
}
} while (rName.isEmpty());
return rName;
所以你不能打破你的循环,直到值为非空。
答案 3 :(得分:0)
如果用户没有输入名称,那么我想抛出异常, 但是我想继续得到答案的循环。
为此你需要使用while loop
从用户检索输入的最佳方法是什么,但要确保 他们正在输入有效数据?
使用应该执行的while loop
,直到用户输入有效输入。您不需要使用递归来实现您想要实现的目标。
public static String addRacer() throws NullPointerException{
System.out.print("Enter a name for a racer: ");
Scanner sc = new Scanner(System.in);
String rName = null;
try {
String rName = sc.nextLine();
if(rName.isEmpty()){
throw new NullPointerException("name cannot be blank");
}
while (rName.isEmpty()) {
System.out.println("Name can't be blank. Try again.");
rName = sc.nextLine();
}
}
catch (NullPointerException e) {
System.out.println(e.toString());
}
return rName;
}
答案 4 :(得分:0)
不要在catch中调用addRacer()函数。并删除我标记的行。如果还有条件递归。
catch (NullPointerException e) {
System.out.println(e.toString());
System.out.print("Enter a name for a racer: ");//remove this
addRacer();//remove this
}