0

友達とJavaの宿題をしていました。インストラクターは、整数入力を数値グレードに変換するJavaプログラムを作成することを望んでいます。100-90=Aなど。唯一の落とし穴は、彼がswitchステートメントを使用しなければならないということです。彼はまたしなければならない:

ユーザーが0未満または100を超える数値を入力した場合に、丁寧なエラーメッセージを表示するcaseをswitchステートメントに含めます。」

もともと私はこれを考えました...

import java.util.Scanner;
public class grade
{
    public static void main(String[] args)
    {
        int ng;//number grade
        String lg = "";//letter grade

        System.out.println("enter grade");

        Scanner in = new Scanner(System.in);

        ng = in.nextInt();

        switch (ng/10) 
        {
            case 10: 
            case 9:     
                lg = "A";  
                break;
            case 8:
                lg = "B";  
            break;
            case 7:     
                lg = "C";  
            break;
            case 6:     
                lg = "D";  
            break;
            default:     
                lg = "F";  
            break;
        }   
         System.out.println("You got an " + lg);
      }
}

100を超え0未満の値を許可するため、これは完全ではありませんが、100から0までのすべての整数を入力しないようにしています。これはswitchステートメントのばかげた使い方のように思えます。DRYの原則を説明する以外に、大学の教授がなぜそれを教えるのか想像できません。

switchステートメントを使用するが、100から0までのすべてのintを入力しない、より良い方法はありますか?

4

4 に答える 4

2

ケースを単純にするために、スイッチ式にいつでも少し複雑さを加えることができます。これにより、、など90-100 as 10、およびすべての入力が計算されるため、デフォルトに該当します。80-89 as 9101 and above will become 11 and abovebelow 0 will become 0 or negative

switch ((ng-ng/100+10)/10)
{
    case 10:
        lg = "A";
        break;
    case 9:
        lg = "B";
        break;
    case 8:
        lg = "C";
        break;
    case 7:
        lg = "D";
        break;
    case 6: case 5: case 4: 
    case 3: case 2: case 1:
        lg = "F";
        break;
    default:
        System.out.println("Polite Error");
        lg = "";
}
于 2013-02-13T06:48:54.040 に答える
0

どうですか:

String lg = null;
switch (ng/10) 
{
    case 10:
        if (ng > 100) {
            // polite error
            break;
        }
    case 9:
        lg = "A"
        break;
    case 8:
        lg = "B";  
        break;
    case 7:     
        lg = "C";  
        break;
    case 6:
        lg = "D";
        break;
    default:
         if (ng < 0) {
             // polite error
             break;
         }
         lg = "F";
         break;
}

その後、switchグレードが設定されているかどうかを確認する必要があります。

if (lg == null) {
    System.out.println("The input score was > 100 or < 0");
} else {
    System.out.println("You got an " + lg);
}
于 2013-02-13T05:51:17.203 に答える
0

ええ、地獄では、このlolに実際にswitchステートメントを使用したいとは思わないでしょう。しかし、あなたが提案した方法は、私がそれを行うために考えることができる最善の方法についてです。

ただし、デフォルトはエラーシナリオの場合です。これは、0未満または100を超える整数である可能性があるためです。0から100の間では、少なくともケースの数には限りがあります(ただし、「F」を繰り返す必要があります)。ケース数回)。

于 2013-02-13T05:53:14.693 に答える
0

整数除算の良い使い方;)

さて、このコードは公式に私を当惑させ、私を泣かせます。ただし、ここでは、switchステートメントを使用するだけです。

import java.util.Scanner;
public class grade
{
    public static void main(String[] args)
    {
        int ng;//number grade
        String lg = "";//letter grade
        boolean error = false;

        System.out.println("enter grade");

        Scanner in = new Scanner(System.in);

        ng = in.nextInt();

        switch (ng/10) 
        {
            case 10: 
                switch (ng)
                {
                     case 100:
                         lg = "A";
                         break;
                     default:
                         error = false;
                         break;
                }
                break;
            case 9:     
                lg = "A";  
                break;
            case 8:
                lg = "B";  
            break;
            case 7:     
                lg = "C";  
            break;
            case 6:     
                lg = "D";  
            break;
            case 5:     
            case 4:     
            case 3:     
            case 2:     
            case 1:     
            case 0:     
                lg = "F";  
                break;
            default:     
                error = true;
            break;
        }   

         if (error) {
           System.out.println("Sorry, the grade must be between 0 and 100");
         } else {
           System.out.println("You got an " + lg);
         }
      }
}

Blech。

于 2013-02-13T05:54:07.147 に答える