【问题标题】:letter grade to GPA programGPA 项目的字母等级
【发布时间】:2014-02-08 02:58:52
【问题描述】:

这里是 Java 初学者。所以我不知道如何去做,所以如果用户输入是“A+”,我会得到 4.0 并且不会更高?同样对于“F”,我想让 F、F-、F+ 都产生 0.0 gpa。我想要么我要为字母等级 A 和 F 设置特殊参数,要么只是在 GPA 上写一个“限制”或“上限”。我的意思是让我的双'gpa'只能是0-4.0的值。您认为最有效的任何一种方法都可以,我只是对 Java 的语法和词汇非常陌生,以至于我什至不知道从哪里开始。

这是我的代码:

import java.util.*;
public class HomeworkCalculator {
    public static void main(String[] args) {
        Scanner in = new Scanner(System. in );
        String grade, letter1, letter2;
        System.out.print("Enter a letter grade: ");
        grade = in .nextLine();
        letter1 = grade.substring(0, 1);
        letter2 = grade.substring(1, 2);

        double gpa = 0;

        if (letter1.equals("A")) {
            gpa = 3.9;
        } else if (letter1.equals("B")) {
            gpa = 3.0;
        } else if (letter1.equals("C")) {
            gpa = 2.1;
        } else if (letter1.equals("D")) {
            gpa = 1.2;
        } else if (letter1.equals("F")) {
            gpa = 0;
        }

        if (letter2.equals("+")) {
            System.out.println(gpa + 0.3);
        } else if (letter2.equals("-")) {
            System.out.println(gpa - 0.3);
        }


    }
}

我尝试在程序结束时将用户输入“A+”单独编码为仅等于 4.0,但是当我只想要 1 个值时,输出只给我 4.0,然后是 4.2。然后我尝试添加一个中断或返回,看看我是否可以做到,如果输入是“A+”,它会自动立即结束代码——希望阻止任何额外的输出发生,但这并没有不会发生。

有什么建议吗?

【问题讨论】:

  • 如果这是我的代码,我会创建一个名为 Grade 的枚举,并将每个字符串与一个数值和一个枚举常量相关联。

标签: java


【解决方案1】:

另一种可能性是,在整个代码段的末尾,您可以添加:

if (gpa > 4) gpa = 4;
if (gpa < 0) gpa = 0;
if (letter1.equals("F") && letter2.equals("+")) gpa = 0;

【讨论】:

  • 没有骰子,仍然给我 A+ 4.2,F+ 0.3,F--.3。
  • 因为您在部分末尾打印出正负 3 的值,而不是更改变量本身。
  • 不确定您的意思?我在最后添加了代码,但它仍然给我错误的值。我在您的附录末尾添加了一个打印功能,以便获得结果。它有效,但我又回到了 2 gpas。
  • 将第一个打印语句替换为我对那些 if/else 语句的其他答案中的代码。
  • 其实没必要,我最终按照你之前的建议做了(从 System.print.out(gpa +- .03) 更改 gpa = gpa +- .03。我只是移动了系统。一直打印到最后。我觉得自己很笨,但我想这就是我的教授所说的编码的全部内容。
【解决方案2】:
if (letter1.equals("A") && letter2.equals("+")) gpa = 4.0;
else if(letter1.equals("A"))
{gpa = 3.9;}
else if(letter1.equals("B")) 
{gpa = 3.0;}
else if(letter1.equals("C"))
{gpa = 2.1;}
else if(letter1.equals("D"))
{gpa = 1.2;}
else if(letter1.equals("F"))
{gpa = 0;}

if (!letter1.equals("F")) {
    if(letter2.equals("+") && !letter1.equals("A")) gpa += 0.3;
    else if(letter2.equals("-")) gpa -= 0.3;
}

【讨论】:

  • 之后立即打印出来。例如复制这一行:System.out.println(gpa);
【解决方案3】:

这里是幼稚的解决方案:

package testgrade;

import java.util.*;

public class Tg {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String grade;
    System.out.print("Enter a letter grade: ");
    grade = in.nextLine();
    double gpa = 0.0;
    boolean bad_entry = false;
    int entered_grade_len = grade.length();
    // Verify entered content
    if (entered_grade_len <= 2 && entered_grade_len > 0) {
        if((grade.substring(0).toUpperCase() == "A") ||
           (grade.substring(0).toUpperCase() == "B") ||
           (grade.substring(0).toUpperCase() == "C") ||
           (grade.substring(0).toUpperCase() == "D") ||
           (grade.substring(0).toUpperCase() == "F"))
        {
            switch(entered_grade_len)
            {
            case 2:
                if((grade.substring(1) == "+") ||
                   (grade.substring(0).toUpperCase() == "-"))
                break;
            default:
                bad_entry = true;
                break;
            }

        }
    }
    if(bad_entry)
    {
        System.out.println("Usage: Enter grades in the normal spectrum from A(+/-) to F");
        System.out.println("eg: A+, B-, D+, C, F...");
        return;
    }
    String lettergrade = grade.substring(0,1).toString().toUpperCase();
    switch (lettergrade) {
    case "A":
        gpa = 4.0;
        break;
    case "B":
        gpa = 3.0;
        break;
    case "C":
        gpa = 2.0;
        break;
    case "D":
        gpa = 1.0;
        break;
    case "F":
        gpa = 0.0;
        break;
    default:
        break;
    }
    if (grade.length() > 1) {
        lettergrade = grade.substring(1, 2);
        switch (lettergrade) {
        case "+":
            if (gpa <= 3 && gpa >= 1.0)
                gpa += 0.3;
            break;
        case "-":
            if (gpa <= 4 && gpa >= 1.0)
                gpa -= 0.3;
            break;
        default:
            break;
        }
    }
    System.out.println(gpa);
    in.close();
}
}

这可以通过一些用于比较的正则表达式来改善很多,但是为了快速和肮脏,它可以工作。 (A = 3.9?呸……但是如果 gpa = 4 和grade.length() = 1) gpa -= 0.1,你可以按照上面的方法做)

【讨论】:

  • 这对我来说太高级了,我会尝试分解你的解决方案来学习一些新东西。
猜你喜欢
  • 2017-07-18
  • 2019-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多