我有这两种方法,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()可以结束而不返回任何内容。

最佳答案

我想这是关于编译器抱怨This method must return a result of type int的问题。

尽管编译器有时可以确定某个函数是否将到达return语句,但情况并非总是如此。从数学上讲,不可能静态确定程序的动态行为。
在计算机科学中,这被称为“停止问题”。在一般情况下,无法确定程序是否终止。
因此,即使您可以确定该方法将始终到达您的return语句之一,但编译器可能无法执行该操作。

10-05 19:10