使用switch / if语句将成绩等级转换为数字等级?

时间:2015-12-22 02:11:05

标签: java string if-statement int switch-statement

我的任务是创建一个java程序,用户输入一个等级(D-到A +)并得到一个分数(0.7到4.3)

  • 如果用户输入" A",他们会得到4 ...." B" = 3 ...." C" = 2 ...." D" = 1。

  • 如果用户输入" +"或者" - "在一封信之后,最终分数增加或减少0.3

  • 因此,例如,如果用户输入" C +",他们会得到" 2.3"

  • 的分数

到目前为止,只有当用户没有添加" +"或" - "。

因此,如果用户只输入一个字母,那就可以了。

由于一些奇怪的原因,如果用户输入" +"或者" - "在一封信之后,输出将是" 0.3"或" -0.3"尊敬。

我不确定为什么。我的AP Comp Sci老师和我都很难过。

以下是我的代码的相关片段

String letterGrade;
double numericGrade;
Scanner reader = new Scanner(System.in);
public boolean getLetterGrade()
{
    System.out.print("Enter a letter grade: ");
    letterGrade = reader.nextLine();
    return (letterGrade.length() < 3) && (("+".equals(letterGrade.substring(1))) || ("-".equals(letterGrade.substring(1))) || (letterGrade.length() == 1));
}
public double getNumericGrade()
{
    numericGrade = 0.0;
    switch(letterGrade.substring(0).toUpperCase())
    {
        case "A":
            numericGrade += 4.0;
            break;
        case "B":
            numericGrade += 3.0;
            break;
        case "C":
            numericGrade += 2.0;
            break;
        case "D":
            numericGrade += 1.0;
            break;
        case "F":
            numericGrade += 0.0;
            break;
    }
    if ("-".equals(letterGrade.substring(1)))
        numericGrade -= 0.3;
    if ("+".equals(letterGrade.substring(1)))
        numericGrade += 0.3;
    return numericGrade;
}

我的猜测是numericGrade在切换语句后被重置为0,对我来说没有任何理由。

2 个答案:

答案 0 :(得分:1)

String.substring(int position)从位置开始返回子字符串,如果使用“1234”.substring(1),则返回“234”

在这种情况下,您使用"C+".substring(0),它返回C +而不是C,您需要String.charAt(0)String.substring(0, 1)

这就是为+/-修复所需的全部内容,但请注意,如果输入的字符串是长度为1(只是字母等级,A / B / C / D / F),那么您的程序将会因为你的if语句试图访问第二个字符而崩溃。如果输入的字符串太短,您应该检查长度并提前返回

答案 1 :(得分:0)

试试这个,一个简单的成绩翻译。如果您想了解更多此类问题的详细信息,可以使用Interpreter设计模式

进行检查
public class Grades {
private double score = 0;
public double calculate(char c) throws IllegalArgumentException{
    switch(c){
        case 'A':
            score += 4; 
            break;
        case 'B':
            score += 3;
            break;
        case 'C':
            score += 2;
            break;
        case 'D':
            score += 1;
            break;
        case '+':
            score += 0.3;
            break;
        case '-':
            score -= 0.3;
            break;
        default:
            throw new IllegalArgumentException("Invalid Argument");
    }

    return score;
}

public static void main(String args[]){
    Scanner reader = new Scanner(System.in);
    Grades grade = new Grades();
    String line = reader.nextLine();
    while(!line.equals("exit")){

        //validate argument here..
        double value;
        for ( int i = 0; i < line.length(); i++){
            value = grade.calculate(line.charAt(i));

        }
        System.out.println("Grade = " + value);
        line = reader.nextLine();
    }
    reader.close();
}