0

这是代码片段:

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梯子的两种情况都添加了返回语句。Eclipse仍然要求我添加退货声明。出于同样的原因,执行代码会引发错误。(错误This method must return a result of type double:)为什么会发生这种情况?

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

4

6 回答 6

9

发生了什么if(j==13)返回false并且从不执​​行相应的returnreturn这个执行路径没有声明对吗?

您需要return为所有可执行路径声明。

于 2013-09-09T19:13:51.760 回答
3

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

绝对确定的最简单方法是添加一条return具有默认值的语句作为最后一条语句。

于 2013-09-09T19:13:41.373 回答
1

不能保证elsereturn语句会执行,所以你必须在return外面声明语句。
在您的情况下,最好在外部声明一个变量并将其分配ifelse阻塞并返回它。
例子:

double returnVariable = 0.0;
if(count==0)
{
   returnVariable  =0.0;
}
else
{
   returnVariable = Double.parseDouble(arr[j]);
}
................
...........
return returnVariable ;
于 2013-09-09T19:14:18.953 回答
1

问题出在这句话之后:

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

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

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

于 2013-09-09T19:14:24.453 回答
0

您的 else 部分没有直接的 return 语句。相反,它包含在另一个 if 语句中。编译器无法确定您是否会热此检查并返回。

于 2013-09-09T19:15:05.233 回答
0

在这个部分:

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

如果您一直执行循环,但找不到 j = 13 (无论 j 是否保证在逻辑上存在,以编程方式无法由编译器确定),则没有适用的return语句.

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

于 2013-09-09T19:16:36.320 回答