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