Java switch语句有问题吗?

时间:2013-11-13 19:03:27

标签: java

我是编程新手,正在上课。我的一项任务涉及使用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语句出错的地方,因为它不会打印。我非常感谢你的帮助!谢谢!

3 个答案:

答案 0 :(得分:5)

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

switch((int) credits) { 
  case 1:
     ...

答案 1 :(得分: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值的某种标准化。

答案 2 :(得分:1)

您正在启用整数,但在您的情况下使用char。所以,是的,这些案件都不会成真。