2017-04-11 10 views
2

変数に基づいて条件を選択するためにスイッチケースを使用しようとしましたが、 がエラーになります。そうする正しいプロセスは何でしょうか?スイッチケースを使用することは可能ですか、またはiffsをネストして使用する必要がありますか?スイッチケースをJavaの条件文として使用

public class Grader { 
    // no attributes required 
    public Grader() { 
// no code required 
} 


public String grade(int mark) { 
    String grade = null; 
// code to determine grade goes here 
    switch (mark){ 
     //For marks 85-100, Grade is HD 
     case ((100>=mark>=85)): 
      grade="HD"; 
      break; 
     //For marks 75-84, Grade is D 
     case (mark>=75 && mark<=84): 
      grade="D"; 
      break; 
     //For marks 65-74, Grade is C 
     case (mark>=65 && mark<=74): 
      grade="C"; 
      break; 
     //For marks 50-64, Grade is P 
     case (mark>=50 && mark<=64): 
      grade="P"; 
      break; 
     //For marks 49-0, Grade is HD 
     case (mark<=49 && mark>=0): 
      grade="F"; 
      break; 






    } 
    return grade; 
} 
public boolean pass(int mark) { 
    boolean pass = false; 
// code to determine pass goes here 

    return pass; 
    } 
} 

I

+1

'if' /' else if'/'else if' /.../' else'を使うだけです。 switch文はJavaではこれをしません。 –

+0

また、 'grade'ローカル変数を持つのではなく、メソッドの結果を知るとすぐに返るのが最も簡単なことに注意してください。 –

答えて

1

スイッチは、それだけのケースでは、一定の値をとります。ランタイムを評価する場合は式を追加できません。

ここでは、伝統的なif-else-ifが最適です。

残念ながら、(Javascriptが持っているように、Javaは、スイッチの範囲を持っていないので、一つの方法は、あなたが希望している取得する結果は10で markを分割するだろうし、必要に応じて切り上げ例えば8.5が9となっ
public String grade(int mark) { 
     String grade = null; 
     // code to determine grade goes here 
     if (mark >= 100 && mark <= 85) { 
      grade = "HD"; 
     } else if (mark >= 75 && mark <= 84) { 
      grade = "D"; 
     } else if (mark >= 65 && mark <= 74) { 
      grade = "C"; 
     } else if (mark >= 50 && mark <= 64) { 
      grade = "P"; 
     } else if (mark <= 49 && mark >= 0) { 
      grade = "F"; 
     } else { 
      grade = "Not found"; 
     } 
     return grade; 
    } 
+0

そのコードはどちらもコンパイルできません... –

+0

私は、OPが提示していたコードを修正する方がいいでしょう。この場合、擬似コードである必要はありません。 –

+0

@JonSkeet自分のコードを修正しました:) –

0

と等。)。その後、各番号は0から10まで、そう、このアプローチには

double markDividedByTen = mark/10.0; 
int mark = (int) (markDividedByTen + 0.5); //round to whole number 
switch (mark){ 
     case 10: 
      grade="HD"; 
      break; 
     case 9: 
      grade="HD"; 
      break; 
     case 8: 
      grade="D"; 
      break; 
     case 7: 
      grade="C"; 
      break; 
     case 6: 
      grade="P"; 
      break; 
     case 5: 
      grade="P"; 
      break; 
     case 4: 
      grade="F"; 
      break; 
     case 3: 
      grade="F"; 
      break; 
     case 2: 
      grade="F"; 
      break; 
     case 1: 
      grade="F"; 
      break; 
     case 0: 
      grade="F"; 
      break; 
    } 

唯一の問題は、45から49へのマークが技術的に「P」グレードを受け取ることになる、ということであるようにそれのためのケースがありますが、 switch文を引き続き使用するif/else if文に対する代替アプローチを示したいだけです。

0

スイッチは式を持つことができないので、if-elseステートメントを使用することができます。 これを使用できます。

public class Grader { 
    // no attributes required 
    public Grader() { 
// no code required 
} 


public String grade(int mark) { 
    String grade = null; 
// code to determine grade goes here 
    if(mark>=85 && mark<=100) 
    { 
    grade = "HD"; 
    } 
    else if(mark>=75 && mark<=84) 
    { 
    grade = "D"; 
    } 
    else if(mark>=65 && mark<=74) 
    { 
    grade = "C"; 
    } 
    else if(mark>=50 && mark<=64) 
    { 
    grade = "P"; 
    } 
    else if(mark>=0 && mark<=49) 
    { 
    grade = "F"; 
    } 
    return grade; 

} 
public boolean pass(int mark) { 
    boolean pass = false; 
// code to determine pass goes here 

    return pass; 
    } 
} 
0

問題は、文がいくつかvalues.In switchよりも小さいか大きい場合は、integer値の型を反復処理している場合、あなたはそれを制御することはできません確認しながらboolean値を生成しようとしているということです。

if (100 >= mark && 85 <= mark) { 
     // grade ... 
    } else if (84 >= mark && 75 <= mark) { 
     // grade ... 
    } else if (74 >= mark && 65 <= mark) { 
     // grade ... 
    } else if (64 >= mark && 50 <= mark) { 
     // grade ... 
    } else if (49 >= mark && 0 <= mark) { 
     // grade ... 
    } else if (-1 >= mark || 101 <= mark) { 
     // Error,mark cannot be lower than 0 and higher than 100 
    } 

これはあなたのproblem.Butこのような状況のために、複数のチェックstatements.Check enumsmapping技術

0

、間違いのif-else文からあなたを惜しま多くのアプローチがあるを解決する必要があります。 switch文が間違っています。

関連する問題