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();

09-29 21:34