2016-05-24 7 views
0

以下はJavaメソッドのコードですが、コンパイルされません。私はEclipseを使用しています。コードをコンパイルしようとすると、次のように表示されます。以下の方法で何が問題になっていますか?

このメソッドは、タイプintの結果を返す必要があります。

a,b,cintとして宣言 されているので、戻り値の型はintです。

public static int f(int a, int b, int c) { 
    if ((a < b) && (b < c)) 
     return a; 
    else if ((a >= b) && (b >= c)) 
     return b; 
    else if ((a == b) || (b == c) || (a == c)) 
     return c; 
} 
+14

これらの条件に当てはまらない場合はどうなりますか? –

+0

これらの条件のいずれも真でない場合は、デフォルトの 'else'を使用します。 –

答えて

12

お客様のifの条件は網羅的ではありません。 a > bb < cの場合、条件が一致せず、関数が何も返さないため、Eclipseが不平を言っているのです。

デフォルトのreturnステートメントを条件なしでまたはelseブロックの最後に追加します。

+0

ありがとう、それは今働いています:) – angie

+0

それらが完全であっても、あなたはまだ私が考えるデフォルトのreturn文を持っていなければなりません。 – Gendarme

4

基本的には、else節がないためにコンパイルされません。なぜなら、どちらの場合も正しくないからです。その後、メソッドには戻り値がありません。したがって、コンパイラはint returnを要求します。

public static int f(int a, int b, int c) { 
     if ((a < b) && (b < c)) 
      return a; 
     else if ((a >= b) && (b >= c)) 
      return b; 
     else if ((a == b) || (b == c) || (a == c)) 
      return c; 
     else{ 
      System.out.println("No clause matched"); 
      return 0; //or something else 
     } 

    } 
1

あなたの機能は返品なしで終了することができます。

public static int f(int a, int b, int c) throws Exception 
{ 
    if ((a < b) && (b < c)) 
    { 
     return a; 
    } 
    else if ((a >= b) && (b >= c)) 
    { 
     return b; 
    } 
    else if ((a == b) || (b == c) || (a == c)) 
    { 
     return c; 
    } 
    throw new Exception("Input not valid"); 
} 

この方法で呼び出し側は例外を扱うことができるか、何かが間違っていたことをログ: これを実現してはならない場合も例外で終了することができます(条件の一つは、常に真でなければなりません)。

2

if-elseブロック以外のブロックが起動するとどうなりますか? あなたがreturn文を欠場、あなたはこれまでと終わりの 対応する値を代入しようとするリターンポイントを作成するには、この方法

public static int f(int a, int b, int c) { 
     int result = 0 ; 
     if ((a < b) && (b < c)) 
      result = a; 
     else if ((a >= b) && (b >= c)) 
      result = b; 
     else if ((a == b) || (b == c) || (a == c)) 
      result = c; 
     return result; 
    } 

を使用して、メソッドの身体の中ですることができ、それを返します。

関連する問題