首页 > 解决方案 > 如何避免Java方法中的两个或多个返回

问题描述

我有这个验证字符串的方法。

在我的任务中,我不能在一个方法中返回超过 1 个。

我怎样才能使这个方法在 do while 循环之后只返回一个值?

public final static String CHOIX_MENUS_VALIDES = "1234";    

public static String validateMenu() {
            
     String choice;
     String choice1 = String.valueOf(CHOIX_MENUS_VALIDES.charAt(0));
     String choice2 = String.valueOf(CHOIX_MENUS_VALIDES.charAt(1));
     String choice3 = String.valueOf(CHOIX_MENUS_VALIDES.charAt(2));
     String choice4 = String.valueOf(CHOIX_MENUS_VALIDES.charAt(3));
    
     do {
         choice = validateString(MSG_SOLL_MENU, MSG_ERR_MENU, 1, 4, true);
    
         if (choice.trim().equals(choice1) || choice.trim().equals(choice2) || choice.trim().equals(choice3) || choice.trim().equals(choice4)) {
            return choice; //Here I don't want to return the choice 
         }
         if (!choice.equals(choice1) || !choice.equals(choice2) || !choice.equals(choice3) || !choice.equals(choice4)) {
            System.out.println(MSG_ERR_MENU);
         }
    
    } while(!choice.trim().equals(choice1) || !choice.trim().equals(choice2) || !choice.trim().equals(choice3) || !choice.trim().equals(choice4));
    
   return choice;
}

如果有人可以帮助我重建该方法以最终仅返回一个值,我将不胜感激。

标签: javastringmethodsreturn

解决方案


简单的解决方案是替换第一个返回

return choice;//这里不想返回选择

由一个break;

另一种解决方案是使用布尔变量(让命名stay

 do{
      boolean stay = true;
      choice = validateString(MSG_SOLL_MENU, MSG_ERR_MENU, 1, 4, true);

      if (...){
          stay = false; 
      }
      else if(...)   {...}
  while(stay && ...);

  return choice;

在每次循环迭代中,您将变量设置为true boolean stay = true;),以便您仅由于该变量设置为而退出循环false。因为我们return从第一个中删除了第一个if(..)并现在添加了变量,所以我们必须将第二个更改if为 an ,这样如果第一个评估为真else if,它就不会被执行。if最后,将新变量添加为 while 条件的一部分。


推荐阅读