1

我是编程新手,正在上课。我的一项任务涉及使用 switch 语句,这是我们最近才学会的。我得到了大部分代码,但由于某种原因,switch 语句不起作用。程序编译并提示必要的输入,但在我输入值时不打印任何 switch 语句。基本上,我想提示用户输入学号(任何数字),输入学分,并打印正确的语句。这是我的代码:

import java.io.*;
import java.util.*;
public class Prog222
{
    public static void main(String[] args)
    {
        for(int i = 1; i<=4; i++)
        {
            double freshmanC = 1.0;
            double sophomoreC = 2.0;
            double juniorC = 3.0;
            double seniorC = 4.0;
            Scanner kbReader = new Scanner(System.in);
            System.out.print("Enter student number "); //Enter 2352, 3639, 4007, and 4915 respectively
            int studentNumber = kbReader.nextInt();
            System.out.print("Enter credits "); //Enter 30.0, 29.9, 70, and 103.7 respectively
            double credits = kbReader.nextDouble();
            switch((int) credits)
            {
                case '1': //Below 30 credit
                System.out.println("Grade level code = " + freshmanC);
                break;
                case '2': //30 credits or more but less than 70 credits
                System.out.println("Grade level code = " + sophomoreC);
                break;
                case '3': //70 credits or more but less than 90 credits
                System.out.println("Grade level code = " + juniorC);
                break;
                case '4': //90 credits or more
                System.out.println("Grade level code = " + seniorC);
                break;
            }
        }
    }
}

我已经为此工作了几个小时,但我真的找不到我的 switch 语句哪里出错了,因为它不会打印。我真的很感激帮助!谢谢!

4

3 回答 3

5

删除引号,以便您比较整数而不是字符文字:

switch((int) credits) { 
  case 1:
     ...
于 2013-11-13T19:04:45.783 回答
2

好吧,这里有两个基本问题。首先是您尝试将int值与char值进行比较,这意味着您的任何案例都不会执行。

第二个问题是,为了让switch语句执行特定的代码case,它必须与大小写完全匹配。因此,如果假设您使用的是int而不是char如下:

switch((int) credits)
    {
        case 1: //Below 30 credit
            System.out.println("Grade level code = " + freshmanC);
            break;
        case 2: //30 credits or more but less than 70 credits
            System.out.println("Grade level code = " + sophomoreC);
            break;
        case 3: //70 credits or more but less than 90 credits
            System.out.println("Grade level code = " + juniorC);
            break;
        case 4: //90 credits or more
            System.out.println("Grade level code = " + seniorC);
            break;
    }

除非信用值分别为 1、2、3 或 4,否则它永远不会执行。解决此问题的一种快速方法是将学分除以 30 并加一个,因此以下内容可以解决您的问题

int newCredits = ((int)credits/30) + 1
switch(newCredits)
    {
        case 1: //Below 30 credit
            System.out.println("Grade level code = " + freshmanC);
            break;
        case 2: //30 credits or more but less than 70 credits
            System.out.println("Grade level code = " + sophomoreC);
            break;
        case 3: //70 credits or more but less than 90 credits
            System.out.println("Grade level code = " + juniorC);
            break;
        default: //90 credits or more
            System.out.println("Grade level code = " + seniorC);
            break;
    }

作为一个快速说明,我改为case 4:这样default:,如果一个人有超过 120 个学分,它仍然会将他们归类为高级。

编辑

所以我刚刚意识到你的学分不会以统一的方式增加(这就是我假设所有大学对每个人都进行相同分类的结果)。credits您必须找到一种方法来为您的价值实现某种标准化。

于 2013-11-13T19:15:44.210 回答
1

您正在打开一个整数,但在您的情况下使用 char 。所以是的,这些案例都不会是真的。

于 2013-11-13T19:04:42.263 回答