为什么eclipse要求我在这段代码中添加一个return语句,即使我添加了一个?

时间:2013-09-09 19:12:12

标签: java

以下是代码段:

private double input()throws IOException
{

    StringTokenizer st=null;
    BufferedReader b=new BufferedReader(new FileReader(csvfile));
    String line=null;
    int count=0;
    while((line=b.readLine())!=null)
    {
        count+=1;
        if(count==0)
        {
            return 0.0;
        }
        else
        {   
            int sum=0;
            String[]  arr=new String[19];
            st=new StringTokenizer(line,",");
            int i=0;
            while(st.hasMoreTokens())
            {
                arr[i]=st.nextToken();
                i++;
            }

            for(int j=2;j<arr.length;j++)
            {
                if(j==13)
                {
                    return Double.parseDouble(arr[j]);      
                }
            }
            System.out.println();
        }
    }
}

正如您所看到的,我为if-else阶梯的两个案例都添加了一个return语句。 Eclipse仍然要求我添加一个return语句。出于同样的原因,执行代码会引发错误。(错误:This method must return a result of type double)为什么会发生这种情况?

背景:上述方法是读取CSV文件并根据另一种方法的要求返回文件的某些部分,这里没有显示。

6 个答案:

答案 0 :(得分:9)

if(j==13)会返回false并且从不执​​行相应的return会发生什么?这个执行路径没有return语句吗?

您需要为所有可执行路径提供return语句。

答案 1 :(得分:3)

您的方法中有多个执行路径不以return语句结尾。所有人都必须这样做。例如,可能永远不会输入while循环。

最简单的方法是添加一个带有默认值的return语句作为最后一个语句。

答案 2 :(得分:1)

无法保证else阻止return语句将被执行,因此您必须在外部声明return语句。
在您的情况下,最好在外部声明变量并将其分配到ifelse块并返回。
例如:

double returnVariable = 0.0;
if(count==0)
{
   returnVariable  =0.0;
}
else
{
   returnVariable = Double.parseDouble(arr[j]);
}
................
...........
return returnVariable ;

答案 3 :(得分:1)

问题出在这句话之后:

for (int j=2; j < arr.length; j++) {
  if (j == 13) {
    return Double.parseDouble(arr[j]);      
  }
}

如果在该循环中没有返回任何内容,Java会期望您之后返回一些内容。 Java没有办法告诉if中的条件在某些时候是真的,事实上,它可能永远不会是真的(如果数组少于13个元素会发生什么?)。 / p>

解决方案是在末尾添加一个额外的return,返回值可以清楚地表明该方法在非预期情况下退出 - 例如,如果j从未等于13。只需在最后一行添加return -1.0;

答案 4 :(得分:0)

你的其他部分没有直接的退货声明。相反,它在另一个if语句中。编译器无法确定您是否将热门此检查并返回。

答案 5 :(得分:0)

在本节中:

    for(int j=2;j<arr.length;j++)
    {
        if(j==13)
        {
            return Double.parseDouble(arr[j]);      
        }
    }

如果你在循环中完成它,并且没有找到j = 13(无论j是否保证逻辑上或不存在,编程上无法由编译器确定),那么没有适用的return声明。

您需要在return循环后添加默认案例for语句。