【发布时间】:2011-12-20 14:53:09
【问题描述】:
我有这两种方法,Java 在 getNumEmails() 中找不到“返回”。它们都在同一个类中,只有静态方法
private static int posSymbol=0;
private static int cont=0;
private static String text=null;
private static int getPosSymbol(){
posSymbol=text.indexOf('@',posSymbol);//if there is no symbol, returns -1
return posSymbol;
}
//Main calls this method
public static int getNumEmails(String completeText){
text=completeText;
while(posSymbol!=(-1)){
posSymbol=getPosSymbol();
if(posSymbol!=(-1)){
cont++;
posSymbol++;
}//close if
else{
return cont; //It seems that it doesn't reach the return always
}//close else
}//close while
}//close method
我知道解决方法很简单,删除“else”并把return cont;一段时间后。但我想知道为什么 Java 认为 getNumEmails() 可以结束而不返回任何内容。
【问题讨论】:
-
如果 getPosSymbol() 的值为 -2 或从未为 -1,它肯定会退出而不返回...
-
是什么让你认为它总是会返回一些东西?
else子句可能永远不会被执行。 -
@Kendrick。是的,但编译器不会进入那个级别的检查。它只是看到
else。 -
@Arkonor - 所以你知道,这段代码存在严重的潜在问题。最糟糕的是,如果您尝试使用此多线程。其中最烦人的是它不能运行两次(在某些情况下)。另外,不要放置闭括号 cmets;大多数现代 IDE 会突出显示开/关括号对,您的方法不应该足够长以使它们成为必要,并且它们存在变得不同步的风险。
-
@Kendrick。 getPosSymbol 不能返回 -2 也不能返回永无止境的值,因为。 a) indexOf() 如果找到符号的匹配项,则返回 -1 或正值。 b)我怀疑它接收到的字符串不能有结尾(可能捕获在流中广播的文本或一些奇怪的东西,但在我的情况下,文本的来源是键盘输入)
标签: java if-statement return