编译器一直告诉返回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";
}
}
}
答案 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
。