public static String hero() {
Scanner scanner = new Scanner(System.in);
System.out.println("Which hero will you play as: Wizard, Elf or Dwarf?");
heroType = scanner.nextLine();
if (heroType.equalsIgnoreCase("wizard") || heroType.equalsIgnoreCase("elf") || heroType.equalsIgnoreCase("dwarf")){
//code
return heroType;
}
else {
System.out.println("This character is not recognised, please choose from Wizard, Elf or Dwarf.");
hero();
}
}
我希望此方法仅在选择了3个选项之一时才返回heroType,否则它将再次调用该方法。但这会导致编译器错误,因为if语句之外没有return语句。最后有return语句的问题是main方法有一个“ String h = hero();”。并且“ h”被传递给其他方法,但是如果用户首先选择了除精灵精灵或矮人以外的其他东西,然后自行进行更正,则“ h”仍会第一次存储来自扫描仪的原始错误值。
它应该按我的想法工作,因为用户最终将不得不提供正确的值(因为再次调用该方法)并且最终将有一个返回值,但事实并非如此。
最佳答案
采用 :
return hero();
而不是仅仅调用hero();