当在另一个方法的计算中使用从switch语句返回的Integer时,结果始终为0

时间:2018-04-20 19:27:47

标签: java switch-statement

我的程序旨在根据用户输入的类大小(S,M,L,X)分配一个整数值。然后,在后面的方法中,我使用此值来计算班级中可用的剩余座位。我遇到的这个问题是,尽管程序正在运行,但无论用户输入什么类大小或者已经注册的学生数量,返回的值始终为零。

该程序包含一些其他不相关的步骤,所以我已经分离了上述方法以便于参考,但如果这更容易,我可以发布我的完整代码。

我的代码分配整数值:

public static int courseSize() {
   System.out.print("Please enter the course size (possible values are: 
   S, M, L, or X):");
   size = console.next().charAt(0);
   switch(size) {
      case 'S': totalSeats = 25;
                break;
      case 'M': totalSeats = 32;
                break;
      case 'L': totalSeats = 50;
                break;
      case 'X': totalSeats = 70;
                break;
      default: System.out.println("Please enter S, M, L, or X");
   }//Close switch statement
   console.nextLine();
   return totalSeats;
}//Close courseSize

这是获取注册学生人数和计算可用座位数的代码:

public static void numStudents() {
  System.out.print("How many students are currently registered for this course? ");
  studentsReg = console.nextInt();
}//Close numStudents method

//This method returns the number of open seats remaining
public static int calcAvail () {
    openSeats = (totalSeats - seatsTaken);
    return openSeats;
} //Close calcAvail method

这是收集用户输入的输出。您可以看到用户输入了L(50个座位),并且有13个学生已注册。

User Input Prompt

但是,您可以在下面的输出中看到它表示剩余的座位数为0。

Output

此代码中的所有变量都在我的类下声明为public,static变量。

有关为什么我的计算不起作用的任何想法?我倾向于将问题作为我的switch语句,因为它使用char作为输入,然后将其存储为整数;但是,输出仍然会在屏幕上打印出正确的数字。

2 个答案:

答案 0 :(得分:1)

console.nextLine();

中移动此numStudents()

默认缺少中断

default: System.out.println("Please enter S, M, L, or X");
    break;
}

return totalSeats;
}

你可以做到

default: System.out.println("Incorrect entry");
    courseSize();
    break;
}

openSeats = (totalSeats - seatsTaken);应该是

openSeats = (totalSeats - studentsReg );

答案 1 :(得分:0)

我会使用以下代码清除您在numStudents()中调用nextInt()所留下的EOL字符

public static void numStudents() {
    System.out.print("How many students are currently registered for this course? ");
    //code A
    studentsReg = console.nextInt();
    console.nextLine();
    //or
    //code B
    studentsReg = Integer.parseInt(console.nextLine());
}//Close numStudents method

然后我会在你的开关周围换一个while(),以确保你的用户必须输入一个有效的选择或重试,并使用nextLine()而不是next(),这也留下了一个EOL字符(' \ n'。)

public static int courseSize() {
       boolean validInput = false;
       while(!validInput)
       {
           validInput = true;
           System.out.print("Please enter the course size (possible values are: S, M, L, or X):");
           size = console.nextLine().charAt(0);
           switch(size) {
           case 'S': totalSeats = 25;
                    break;
           case 'M': totalSeats = 32;
                    break;
           case 'L': totalSeats = 50;
                    break;
           case 'X': totalSeats = 70;
                    break;
           default: System.out.println("Incorrect Value Entered, Please enter S, M, L, or X");
                   validInput = false;
                   break;
           }//Close switch statement
       }
       return totalSeats;
}//Close courseSize