代码之家  ›  专栏  ›  技术社区  ›  Maizere Pathak.Nepal

当返回类型为string时,是否还需要在if-else条件之外返回string

  •  -1
  • Maizere Pathak.Nepal  · 技术社区  · 7 年前

    enter image description here 编译器一直告诉我们返回字符串。我使用了if-else条件,并从if-else内部返回了字符串。如果我把return语句放在代码的末尾,编译器的问题就会解决,但我的问题就会开始。我不明白如何解决这个问题。我想在合适的时候回来。

    代码:

    public String isValidID(String id) {
         if(getId().length()!=6) {//checks for 6 digit id
             return "wrong";
         }
         else{//checks if digit contains invalid entry
            for(int i=0;i<getId().length();i++){
                if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                    return "wrong";
                }
         }
    
    
    }
    
    6 回复  |  直到 7 年前
        1
  •  1
  •   T.J. Crowder    7 年前

    作为对我的补充意见的回复 return "right" 最后,你说:

    但这将使程序始终返回“正确”。因为在if-else条件检查之后,编译器将执行rest语句并始终返回“right”

    现在你困惑的根源已经很清楚了: return 不只是设置方法将返回的值,而是 而且 立即退出该方法。例如 return "wrong"; 在你的循环中,你会立即从循环和方法中退出。我见过的所有使用 回来 关键字(而有些语言,如VB/VB.Net,您可以为函数的名称指定一个值来设置返回值,但执行通常会继续,直到使用“退出”)。

    这就是为什么添加 return "right"; 最后是如何解决这个问题的,因为如果代码达到了这一点,它就不会达到这一点 返回“错误”; 在其上方的程序流程中:

    public String isValidID(String id) {
         if(getId().length()!=6) {//checks for 6 digit id
             return "wrong";                        // <== Exits immediately if reached
         }
         else{//checks if digit contains invalid entry
            for(int i=0;i<getId().length();i++){
                if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                    return "wrong";                 // <== Exits immediately if reached
                }
         }
         return "right";                            // <== Exits immediately if reached
                                                    // (granted, we would have exited
                                                    // below anyway :-) )
    }
    
        2
  •  1
  •   Amit Bera    7 年前

    在任何情况下,你都需要返回“某物”。在你的代码中 return 从未在特定条件下执行过。假设你的程序执行到了极限 if(Id.charAt(i)>'9'||Id.charAt(i)<'0') 而且它永远也不会消失 true 那么该方法将返回什么?因此,您需要以这样一种方式编写代码:在条件方法执行中,将执行返回字符串对象的返回语句。

    想象一种情况吧

    1. getId().length()!=6 -> false
    2. getId().length() is 0 
    3. for(int i=0;i<getId().length();i++) will never enter the loop.
    

    那么当你调用这个方法时,它应该返回什么呢。

        3
  •  0
  •   Youcef LAIDANI    7 年前

    如果我能理解你的逻辑,你可以使用:

    public String isValidID(String id) {
       return id.matches("\\d{6}") ? "correct" : "wrong";
    }
    

    检查长度是否为6,然后检查所有字符是否都是数字,可以在一条指令中组合这两个字符,只需检查输入是否是长度为6的数字和正则表达式即可。

    如果你想要一个干净的解决方案,使用 boolean 在本例中,您可以使用以下命令代替字符串:

    public boolean isValidID(String id) {
       return id.matches("\\d{6}");
    }
    
        4
  •  0
  •   João Machado    7 年前

    在你的else中,你有另一个if语句,所以你的返回并不总是到达。在for循环之后,您需要再次返回。 如果你在检查某件事是对的还是错的,你应该返回布尔值true或false。

    公共布尔值isvalidd(字符串id){if(getId().length()!=6){//检查6位id返回false;} else{//检查数字是否包含无效项(int i=0;i'9'| | Id.charAt(i)<0')返回false;} 返回true;//当没有发现任何虚假信息时。 } }

        5
  •  0
  •   Mesabloo    7 年前

    如果是你,我会这么做的 public boolean isValidID 相反

    在这里,编译器告诉您,如果ID的长度不正确,并且ID的组成部分(因此字符)介于0和9之间(例如,如果您的ID类似于 00ggg89 ,那么我想这是错的,但是如果你的身份证是 000000 ,那么它可能是对的。以下是我会做的

    public boolean isValidID(String id) {
        return id.matches("[0-9]{6}");
    }
    

    希望这有帮助!:D

        6
  •  -3
  •   Fabian Zbinden    7 年前
    public String isValidID(String id) {
        String result = "right";
            if(getId().length()!=6) {//checks for 6 digit id
                result =  "wrong";
            }
            else{//checks if digit contains invalid entry
                for(int i=0;i<getId().length();i++){
                    if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                        result  = "wrong";
                }
            }
            return result;
        }
    

    编辑:如果第一条语句无效,它将永远不会返回语句。这就是为什么你必须退回 String 在所有可能的情况下。