2017-12-22 5 views
2

C#でレターグレードに変換すると、それは、これを行うために私に尋ねた:私はオンラインのC#クラスに出席

Your solution can use a series of branching statements like if(), else-if(), and else(), but does not require any iterative loops.

The grade conversion levels should be as follows:

  • A grade of "A" is given to any value between 90 - 100
  • A grade of "B" is given to any value between 80 - 89
  • A grade of "C" is given to any value between 70 - 79
  • A grade of "D" is given to any value between 60 - 69
  • All other values will receive a grade of "F"

私のコードがある

private char convertToLetterGrade(int numberGrade) 
    { 
     // replace with student code(Which I have done) 

     if (numberGrade >= 90 && numberGrade <= 100) 
     { 
      MessageBox.Show("A"); 
     } 

     else if (numberGrade >= 80 && numberGrade <= 90) 
     { 
      MessageBox.Show("B"); 
     } 
     else if (numberGrade >= 70 && numberGrade <= 80) 
     { 
      MessageBox.Show("C"); 
     } 
     else if (numberGrade >= 60 && numberGrade <= 70) 
     { 
      MessageBox.Show("D"); 
     } 

     else if (numberGrade <= 70) 
     { 
      MessageBox.Show("F"); 
     } 
    } 

また言っ

Test your algorithm by running the program, entering a value in the textbox on the screen, and clicking on the "Convert To Letter Grade" button.

私は何をすべきか?

編集:申し訳ありませんが、私は、私はボックスに入力しなければならない数(マジックナンバーのものを捨てる)

を持っていると私はエラーを取得していますがより明確にするために必要な:AlgorithmTest.convertToLetterGrade(int): Not all paths return a value

+0

入力を入力してシス​​テムのコードをテストします。 –

+4

テキストボックスとコードを実行するボタンでUIを作成する方法についてのご質問はありますか? – burnttoast11

+1

あなたが何を求めているのか不明確です。あなたのコードで何が間違っていますか? –

答えて

1

AlgorithmTest.convertToLetterGrade(int): Not all paths return a value

このメソッドはすべての大文字小文字の値を返す必要があります。

private char convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 
    char letter = 'F'; 
    if (numberGrade >= 90 && numberGrade <= 100) 
    { 
     MessageBox.Show("A"); 
     letter = 'A' 
    } 

    else if (numberGrade >= 80 && numberGrade < 90) 
    { 
     MessageBox.Show("B"); 
     letter = 'B' 
    } 
    else if (numberGrade >= 70 && numberGrade < 80) 
    { 
     MessageBox.Show("C"); 
     letter = 'C' 
    } 
    else if (numberGrade >= 60 && numberGrade < 70) 
    { 
     MessageBox.Show("D"); 
     letter = 'D' 
    } 
    return letter; 
} 

また、<=<の使い方に注意してください。

+0

あなたの回答はうまくいきましたが、それを働かせるためには、各レター= 'X'ステートメントの後にセミコロンを追加する必要がありました – SamuraiWarrior

+0

また、 "letter"ステートメントを追加した理由を教えてください。 '? – SamuraiWarrior

+0

私が言ったように、メソッドは 'char'を返すことを期待しており、すべての場合に 'char'を返すべきです。あなたのケースでは、他の人が既にロジックを持っているので、 'F'の余分なロジック制御の必要はありません。私はそれをより深く理解するためにデバッグすることをお勧めします。 – lucky

0

関数が

private CHAR ConvertToLetterGrade(int numberGrade) 

あるので、あなたがエラーを取得しているが、あなたはあなたの関数で文字を返していません。それは値を返す必要がない場合

private void ConvertToLetterGrade(int numberGrade) 

に変更しEDIT: あなたがやっているすべてのメッセージボックスを表示されているので、あなたは値を返す必要はありません。関数が値を返す必要がない場合は、voidをタイプするように設定する必要があります。あなたは最初のコードセットに非常に近いものでしたが、ちょっとした変更が必要です。

private void convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 

    if (numberGrade >= 90 && numberGrade <= 100) 
    { 
     MessageBox.Show("A"); 
    } 

    else if (numberGrade >= 80 && numberGrade < 90) 
    { 
     MessageBox.Show("B"); 
    } 
    else if (numberGrade >= 70 && numberGrade < 80) 
    { 
     MessageBox.Show("C"); 
    } 
    else if (numberGrade >= 60 && numberGrade < 70) 
    { 
     MessageBox.Show("D"); 
    } 

    else 
    { 
     MessageBox.Show("F"); 
    } 
} 

また、if文の正しいものを比較していることを確認してください。もともとあなたは文字のグレード 'B'のためにnumberGrade >= 80 && numberGrade <= 90でした。 <=(以下)は、 'B'が80〜89の間であるため、数字の等級が90の場合はtrueを返します。

+0

私は試してみませんでした'仕事はしていますが、型voidをcharに変換できません」というエラーが表示されました – SamuraiWarrior

+0

コードに他の回答から' return 'ステートメントを追加しましたか?もしそうなら、それらを削除して、やり直してください。 – B3W

+0

私は 'return'ステートメントを試してみましたが、まだ何もしていませんでした。 – SamuraiWarrior

0

質問を解決するには2通りの方法があります。値を返す必要がない場合(表示のみ)、関数のcharのタイプをvoidに変更してください。そうでなければ、例えば、各ケースのreturn操作を追加する必要があります。

if (numberGrade >= 90 && numberGrade <= 100 
{ 
    MessageBox.Show("A"); 
    return 'A'; 
} 

また、関数は関係なく、numberGrade値いくつかのデフォルト値を返す必要があります。すべての条件のブロックの後にreturn 'O'を追加することによって可能です。

0

まず、convertToLetterGradeは、charを返す必要があります。これは、メソッドの署名を選択したことを条件としているためです。だから、[OK]を、のはcharを返してみましょう:

private char convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 

    if (numberGrade >= 90 && numberGrade <= 100) 
    { 
     return `A`; 
    } 
    else if (numberGrade >= 80 && numberGrade <= 90) 
    { 
     return `B`; 
    } 
    else if (numberGrade >= 70 && numberGrade <= 80) 
    { 
     return `C`; 
    } 
    else if (numberGrade >= 60 && numberGrade <= 70) 
    { 
     return `D`; 
    } 
    else if (numberGrade <= 60) 
    { 
     return `F`; 
    } 
} 

しかし、これはまだ間違っています。理由は分かりますか?numberGrade110とすると、精神的にパスの実行が続くでしょうか?その場合、このメソッドは何かを返しますか?

あなたの方法の仕様が[100, 60)に属していない任意の値はそれほどFでなければならないと述べているあなたはまさにこのに従うならば、あなたの方法は次のようになります。

private char convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 

    if (numberGrade >= 90 && numberGrade <= 100) 
    { 
     return `A`; 
    } 
    else if (numberGrade >= 80 && numberGrade <= 90) 
    { 
     return `B`; 
    } 
    else if (numberGrade >= 70 && numberGrade <= 80) 
    { 
     return `C`; 
    } 
    else if (numberGrade >= 60 && numberGrade <= 70) 
    { 
     return `D`; 
    } 
    else 
    { 
     return `F`; 
    } 
} 

あなたは違いを参照していますか?現在、numberGradeは何かを返すパスに従います。 convertToLetterGrade(110)返信Fはちょっと変わっているようですが、ちょっと、あなたが与えた仕様ですね!

しかし、私たちはまだうまくいく可能性があります。あなたはやや次の操作を行って、これを最適化することができるようにif else節は、順にを評価されていることに注意してください:

private char convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 

    if (numberGrade > 100) 
    { 
     return `F` 
    } 
    if (numberGrade >= 90) 
    { 
     return `A`; 
    } 
    else if (numberGrade >= 80) 
    { 
     return `B`; 
    } 
    else if (numberGrade >= 70) 
    { 
     return `C`; 
    } 
    else if (numberGrade >= 60) 
    { 
     return `D`; 
    } 
    else 
    { 
     return `F`; 
    } 
} 

あなたはそれをすでに確認した場合ので、各else if句の上限をチェックする必要はありません前のもの。不要な点検を避ける。

最後に(これは主に意見ですが)、通常はできるだけメソッド内で複数のリターンを避ける傾向があります。多くの書籍には、次の方法で同様のメソッドが実装されています。

private char convertToLetterGrade(int numberGrade) 
{ 
    // replace with student code(Which I have done) 
    char grade; 

    if (numberGrade > 100) 
    { 
     grade = `F`; 
    } 
    if (numberGrade >= 90) 
    { 
     grade = `A`; 
    } 
    else if (numberGrade >= 80) 
    { 
     grade = `B`; 
    } 
    else if (numberGrade >= 70) 
    { 
     grade = `C`; 
    } 
    else if (numberGrade >= 60) 
    { 
     grade = `D`; 
    } 
    else 
    { 
     grade = `F`; 
    } 

    return grade; 
} 
関連する問題