以下是代码段:
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文件并根据另一种方法的要求返回文件的某些部分,这里没有显示。
答案 0 :(得分:9)
if(j==13)
会返回false
并且从不执行相应的return
会发生什么?这个执行路径没有return
语句吗?
您需要为所有可执行路径提供return
语句。
答案 1 :(得分:3)
您的方法中有多个执行路径不以return
语句结尾。所有人都必须这样做。例如,可能永远不会输入while
循环。
最简单的方法是添加一个带有默认值的return
语句作为最后一个语句。
答案 2 :(得分:1)
无法保证else
阻止return
语句将被执行,因此您必须在外部声明return
语句。
在您的情况下,最好在外部声明变量并将其分配到if
和else
块并返回。
例如:
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
语句。