繁体   English   中英

是否有可能仅在某件事发生时返回一个值,但不是这样?

[英]Is it possible to return a value only if a certain thing happens, but not otherwise?

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

我不喜欢递归方法。 保持简单和可扩展。

public class Test
{
   private static final Set<String> HEROES = new HashSet<>(4);

   static {
      HEROES.add("wizard");
      HEROES.add("elf");
      HEROES.add("dwarf");
   }

   public static final void main(final String... args) {
      hero();
   }

   public static final String hero() {
      final Scanner scanner = new Scanner(System.in);
      String heroType;

      while (true) {
         System.out.println("Which hero will you play as: Wizard, Elf or Dwarf?");
         heroType = scanner.nextLine().trim().toLowerCase();

         if (HEROES.contains(heroType)) {
            return heroType;
         }

         System.out.println("This character is not recognised, please choose from Wizard, Elf or Dwarf.");
      }
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM