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はしごの両方のケースに return ステートメントを追加しました。Eclipsereturnステートメントを追加するようにまだ求めています。コードを実行すると、同じ理由でエラーが発生します。(エラー : This method must return a result of type double)なぜこれが起こっているのですか?

背景: 上記の方法は、CSV ファイルを読み取り、別の方法の要件に従ってファイルの特定のセクションを返すことです。ここでは示していません。

4

6 に答える 6

9

if(j==13)対応する を返しfalse、決して実行しないのはどうなりreturnますか? returnこの実行パスのステートメントはありませんよね?

returnすべての実行可能パスのステートメントが必要です。

于 2013-09-09T19:13:51.760 に答える
3

returnメソッドには、ステートメントで終わらない実行パスがいくつかあります。それらのすべてがそうしなければなりません。たとえば、whileループに入らない可能性があります。

return確実に確実にするための最も簡単な方法は、デフォルト値を持つステートメントを最後のステートメントとして追加することです。

于 2013-09-09T19:13:41.373 に答える
1

elseブロックreturn文が実行される保証はないので、return外側で文を宣言する必要があります。
あなたの場合、変数を外部で宣言し、それを割り当ててifブロックelseして返すことをお勧めします。
例:

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ある時点で の条件が true になることを伝える方法がなく、実際、決して true にならない可能性があります (配列の要素が 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ステートメントはありません。 .

ループの後にデフォルトの casereturnステートメントを追加する必要があります。for

于 2013-09-09T19:16:36.320 に答える