【问题标题】:Switch statement to determine letter grade from user input (decimal)用于根据用户输入确定字母等级的 switch 语句(十进制)
【发布时间】:2015-10-07 18:52:03
【问题描述】:

我的导师希望我使用 switch 语句,但我正在计算一个学生的成绩,从本质上讲,我会考虑使用 double 但我不能。程序应要求用户输入,然后学生输入哪个数字(例如:92.99),根据教学大纲打印出字母等级。请帮忙! 此外,这不再正常工作。它不会打印出字母等级。 这是我目前所拥有的:

public class calculate {

    private static String gradefinal;
    private static char grade;

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
    // variable declaration

        Scanner in = new Scanner(System.in);    //Input device scanner
        double finalgrade = 0.0; 

    // input 

        String first_name;              //Holds first name 
        System.out.print("Enter your first name: ");
        first_name = in.next();

        String last_name;               //Holds last name 
        System.out.print("Enter your last name: ");
        last_name = in.next();

        String major;                   //Holds user's major
        System.out.print("Enter your intended major: ");
        major = in.next();

        String ist;                     //Holds user's class number
        System.out.print("Enter the IST class you are in: ");
        ist = in.next();

        String final_grade;         //Holds user's letter grade
        System.out.print("Enter your final grade: ");
        final_grade = in.next();

        // process 



        if (finalgrade <= 59.99) 
        {
            grade = 'F';

        }
        else if (finalgrade >= 90.00)
        {
            grade = 'A';
        }
        else if ((finalgrade <= 89.99) && (finalgrade >= 79.99))
        {
            grade = 'B';
        }
        else if ((finalgrade <= 79.99) && (finalgrade >= 69.99))
        {
            grade = 'C';
        }   
        else if ((finalgrade <= 69.99) && (finalgrade >= 60.00))
        {
            grade = 'D';
        }

    //output    
        System.out.printf("First Name: %s\nLast Name: %s\nIntended Major: %s\nIST Class: %s\nYour final grade is: %s\nfinal letter grade: %s",first_name, last_name, major, ist, final_grade, grade);

    }

}

【问题讨论】:

  • 此外,它不能正常工作。它不会打印出字母等级。
  • 考虑通过下方的“编辑”链接为您自己的问题直接添加任何额外的 cmets。
  • 可能是重复的,但不是肯定的。我确信其中的一些答案可能是您的解决方案:In Java,Using switch statement with a range of value in each case?
  • 这可能会有所不同,因为我试图让我的程序打印出一个字母等级(字符串或字符),根据用户在系统中输入的数字等级(双倍)。跨度>

标签: java


【解决方案1】:

好的,这是作业,所以我会尽量减少代码。

我认为这里有几个选项,这完全取决于您可以使用什么。

1) 我认为最简单的选择是将双精度“转换”为字符串,并使用带有字符串第一个字符的 switch 语句。因此,如果它以 9 开​​头,它将是 A,因为您似乎没有计算 A+/A-。

2) 您可以向下舍入到最接近的十位,并将双精度转换为int,并使用带有int 的switch 语句。这样你就只有 4 个数字要检查。 default 将成为您的朋友。

【讨论】:

    【解决方案2】:

    如您所知,double 不能用于开关。

    The Switch Statement

    与 if-then 和 if-then-else 语句不同,switch 语句可以 有许多可能的执行路径。开关与 byte、short、char 和 int 原始数据类型。它也适用于 枚举类型(在 Enum Types 中讨论)、String 类和一个 一些包装某些原始类型的特殊类:字符, 字节、短整数和整数(在数字和字符串中讨论)。

    一种选择是将double 自动装箱为Double,然后获取其int 值:

    Integer i = d.intValue();
    

    【讨论】:

    • 非常感谢您提供的信息;我现在就试试。
    【解决方案3】:

    将它四舍五入到最近的10s的位置,将它变成一个字符串,然后打开字符串:

    String gradePercent = Math.round(finalGrade/10).toString();
    switch (gradePercent) {
        "6" : grade = "D"; break;
        "7" : grade = "C"; break;
        "8" : grade = "B"; break;
        "9" : "10" : grade = "A"; break;
        default: grade = "F";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2018-09-30
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多