0

I'm trying to compare a Scanner number in a switch statement. The scanner is working properly but not comparing as it should.

    private String gradeLevel;

    public byte askGrade(){
        Scanner scan = new Scanner(System.in);
        System.out.println("Please enter grade level; ");
        System.out.println(" 1-Freshman \n 2-Sophomore \n 3-Junior \n 4-Senior ");
        byte grade = scan.nextByte();
        switch(grade){
            case 1:  gradeLevel = "Freshman";
            case 2:  gradeLevel = "Sophomore";
            case 3:  gradeLevel = "Junior";
            case 4:  gradeLevel = "Senior";
            default: gradeLevel = "Withdrawn";
        }
        return gradeLevel;
    }

It is always defaulting to "withdrawn"

1 Answers1

1

You should use break in each case.

From switch documentation

Each break statement terminates the enclosing switch statement. Control flow continues with the first statement following the switch block. The break statements are necessary because without them, statements in switch blocks fall through: All statements after the matching case label are executed in sequence, regardless of the expression of subsequent case labels, until a break statement is encountered

Scanner scan = new Scanner(System.in);
System.out.println("Please enter grade level; ");
System.out.println(" 1-Freshman \n 2-Sophomore \n 3-Junior \n 4-Senior ");
byte grade = scan.nextByte();
String gradeLevel;
switch (grade) {
    case 1:
        gradeLevel = "Freshman";
        break;
    case 2:
        gradeLevel = "Sophomore";
        break;
    case 3:
        gradeLevel = "Junior";
        break;
    case 4:
        gradeLevel = "Senior";
        break;
    default:
        gradeLevel = "Withdrawn";
}
System.out.println(gradeLevel);

Output

Please enter grade level; 
 1-Freshman 
 2-Sophomore 
 3-Junior 
 4-Senior 
2
Sophomore
Butiri Dan
  • 1,759
  • 5
  • 12
  • 18