有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java switch语句工作不正常

我有两个类用于计算ISP计划的成本和收集输入/显示成本。伊斯曼。java和ISP。java ISPMain应该显示服务计划,并要求用户根据包的字母选择他们的计划,如包a、包b或包c。我已经设置了它,所以用户输入字符来选择计划。如果计划不是包c(无限计划),则系统会提示用户输入他们使用的小时数

一旦输入小时数并以小时为单位存储,ISP就会使用。java计算成本,然后计算ISPMain。java显示它。我的问题是,我在ISP中的switch语句只显示默认值,我不知道为什么。有人能解释一下吗

public class ISPMain
{

    public static void main(String[] args)
    {
        char pkg;
        double hoursUsed; 

        Scanner kb = new Scanner(System.in);

        System.out.println("The three packages offered are: ");
        System.out.println("Package A: For $9.95 per month, 10 hours of access are provided. \nAdditional hours are $2.00 per hour.");
        System.out.println("Package B: For $14.95 per month, 20 hours of access are provided. \nAdditional hours are $1.00 per hour.");
        System.out.println("Package C: For $19.95 per month, unlimited access is provided.");

        System.out.println("Please type the letter of the package you have: ");
        pkg = kb.nextLine().toUpperCase().charAt(0);

        if(pkg == 'A')
        {
            System.out.print("Enter number of hours: ");
            hoursUsed = kb.nextDouble();
        }
        else if(pkg == 'B')
        {
            System.out.print("Enter number of hours: ");
            hoursUsed = kb.nextDouble();
        }
        else if(pkg == 'C')
        {
            System.out.print("You have unlimited access! No need to enter hours used. \n");
        }


        ISP user = new ISP();  
        System.out.print("Total charges: " + user.calculateCharges());

    }
}

来自ISP的switch语句。爪哇:

public double calculateCharges()
{

    switch (pkg)
    {
        case 'A':
        if (hoursUsed < 10)
        {
            return 9.95;
        }

        else
        {
            return (hoursUsed - 10)*2 + 9.95;
        }

        case 'B':
        if (hoursUsed < 20)
        {
            return 14.95;
        }

        else
        {
            return (hoursUsed - 20) + 14.95;
        }  

        case 'C':
            return 19.95;

        default:
            System.out.println("Invalid input!");
            return 0;
    }


}

总之,我的if-else工作正常,但开关仅显示“无效输入”


共 (2) 个答案

  1. # 1 楼答案

    正如其他人所说,您需要将pkg变量放入switch语句的范围。试试这个:

    public double calculateCharges(char pkg){
     switch(pkg){
         case('A'):{
          //insert code here
           break;
         }
         case('B'):{
        //insert code here
         break;
         }
         case('C'):{
         //insert more code here
         break;
         }
      default:{
      //code here 
      break;
      }
     }
    }
    

    然后调用您的方法,如:

    System.out.print("Total charges: " + user.calculateCharges(pkg));
    
  2. # 2 楼答案

    默认:case语句将始终在代码中运行,因为char-pkg未定义为方法的参数

    用户可以输入A、B或C,但由于未通过,最终结果将始终为默认值,因此导致输入无效

    尝试:

    public double calculateCharges(char pkg){
        switch (pkg)
        {
           case 'A':
           if (hoursUsed < 10){
            return 9.95;
           }else{
            return (hoursUsed - 10)*2 + 9.95;
           }
    
           case 'B':
           if (hoursUsed < 20){
            return 14.95;
           }else{
            return (hoursUsed - 20) + 14.95;
           }  
    
           case 'C':
           return 19.95;
    
           default:
           System.out.println("Invalid input!");
           return 0;
    }