当返回类型为String时,我还需要在if-else条件之外返回字符串

时间:2018-05-26 12:22:33

标签: java return

enter image description here编译器一直告诉返回string.I使用了if-else条件,并且在if-else中我返回了string。如果我在代码末尾放置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 个答案:

答案 0 :(得分:1)

在任何情况下,您都需要返回&#34;某事&#34;。在您的代码中,return可能在某种情况下从未执行过。假设您的程序执行到if(Id.charAt(i)>'9'||Id.charAt(i)<'0')并且永远不会得到true那么该方法将返回什么?因此,您需要以条件方法执行将执行返回String对象的return语句的方式编写代码。

想象一下conditon假设

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

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

答案 1 :(得分:1)

在回复我最后添加return "right"的评论时,您说:

  

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

现在你的困惑的来源很明显:return不只是设置方法将返回的值,立即退出方法。因此,例如,循环中的return "wrong";将立即退出循环和方法。我见过的所有使用return关键字的语言都是如此(有些语言,比如VB / VB.Net,你可以在函数的名称中指定一个值来设置返回值,但是执行继续正常,直到你使用“退出”)。

这就是为什么在最后添加return "right";的原因是你如何解决这个问题,因为如果代码在上面的程序流程中达到return "wrong";,代码将无法达到这一点:

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 :(得分:0)

在你的其他地方你有另一个if语句,所以你的回报并不总是达到。在for循环后你需要另一个返回。 而且你正在检查是否存在错误或错误,你应该返回布尔值true或false。

public boolean isValidID(String id){if(getId()。length()!= 6){//检查6位数id返回false; } else {//检查数字是否包含无效条目(int i = 0; i&#39; 9&#39; || Id.charAt(i)&lt;&#39; 0&#39;)返回false; } return true; //当没有找到false时。 }  }

答案 3 :(得分:0)

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

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

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

如果您想要一个干净的解决方案,请使用boolean而不是String,在这种情况下您可以使用:

public boolean isValidID(String id) {
   return id.matches("\\d{6}");
}

答案 4 :(得分:0)

所以在你的情况下,我会改为import cv2 import dlib image = cv2.imread('..\\pessoas\\beatles.jpg') detector = dlib.cnn_face_detection_model_v1("..\\mmods\\mmod_human_face_detector.dat") detectedFaces = detector(image) for face in detectedFaces: l, t, r, b, c = (int(face.rect.left()), int(face.rect.top()), int(face.rect.right()), int(face.rect.bottom()), face.confidence) cv2.rectangle(image, (l, t), (r, b), (255, 0, 0), 2) cv2.imshow("CNN Detector", image) cv2.waitKey(0) cv2.destroyAllWindows()

在这里,编译器会告诉您在ID长度不正确且ID的组成部分(因此caracters)介于0和9之间时返回一些内容(例如,如果您的ID类似于{{1然后我认为这是错误的,但如果你的ID是public boolean isValidID,那么它可能是正确的。这就是我要做的事情

00ggg89

希望这有帮助! :d

答案 5 :(得分:-3)

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;
    }

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