【问题标题】:How to return values found in a switch statement Java如何返回在 switch 语句 Java 中找到的值
【发布时间】:2015-04-17 07:51:42
【问题描述】:

如何将在此 switch 语句中找到的值返回给类的其余部分以供使用(我想在该 switch 语句之外使用 oneTotal、twoTotal 等)?这是switch语句的代码:

        switch(itemNo){
        case 1:
            double oneTotal = 2.98 * userQuantity;
            return oneTotal;
        case 2:
            double twoTotal = 4.50 * userQuantity;
            return twoTotal;
        case 3:
            double threeTotal = 9.98 * userQuantity;
            return threeTotal;
        case 4:
            double fourTotal = 4.49 * userQuantity;
            return fourTotal;
        case 5:
            double fiveTotal = 6.87 * userQuantity;
            return fiveTotal;
        }

在 switch 语句的外面,我希望一旦用户停止使用 switch 语句(我在一个 while 循环中),将五个总计相加,然后希望返回五个总计以用于主类的方法(switch 语句在它自己的 double、非 void 类中,因此它可以返回值)。

【问题讨论】:

  • 你试过在switch语句之前声明变量吗?
  • 你应该避免在 switch 语句中声明变量。

标签: java switch-statement return double user-input


【解决方案1】:
    double returnValue;
    switch(itemNo){
    case 1:
        double oneTotal = 2.98 * userQuantity;
        returnValue = oneTotal;
        break;
    case 2:
        double twoTotal = 4.50 * userQuantity;
        returnValue = twoTotal;
        break;
    case 3:
        double threeTotal = 9.98 * userQuantity;
        returnValue = threeTotal;
        break;
    case 4:
        double fourTotal = 4.49 * userQuantity;
        returnValue = fourTotal;
        break;
    case 5:
        double fiveTotal = 6.87 * userQuantity;
        returnValue = fiveTotal;
        break;
    }
    return returnValue; 

    double factor;
    switch(itemNo){
    case 1:
        factor = 2.98;
        break;
    case 2:
        factor = 4.50;
        break;
    case 3:
        factor = 9.98;
        break;
    case 4:
        factor = 4.49;
        break;
    case 5:
        factor = 6.87;
        break;
    }
    return factor * userQuantity;

不要忘记默认分支。至少抛出一个异常。

double[] myItemValues= {2.98, 4.5, 9.98, 4.49, 6.87};
return myItemValue[itemNo];

【讨论】:

  • 您可以删除帖子,随意编辑,然后取消删除。
【解决方案2】:

在 switch 语句的顶部定义一个变量,以便它在 switch 范围内可见。然后在每种情况下将您的值分配给该变量。然后作为最后一行返回您分配的变量。

【讨论】:

    【解决方案3】:

    尝试在 switch 语句之前定义一个名为 result 的变量,例如:

    double result = 0.;
    switch(itemNo){
        case 1: 
            result = 2.98 * userQuantity; 
            break;
         ....
    }
    return result;
    

    【讨论】:

    • 当我尝试使用结果时,它似乎不起作用。
    • 你可以在main方法中调用double result = mymethod(); System.out.println(result);
    【解决方案4】:

    以下应该有效:

        double total;
        switch(itemNo){
        case 1:
            total = 2.98 * userQuantity;
            break;
        case 2:
            total = 4.50 * userQuantity;
            break;
        case 3:
            total = 9.98 * userQuantity;
            break;
        case 4:
            total = 4.49 * userQuantity;
            break;
        case 5:
            total = 6.87 * userQuantity;
            break;
        default:
            throw new IllegalArgumentException("selected: " + itemNo);
        }
        return total;
    

    【讨论】:

      【解决方案5】:
      double value = 0.0;
      switch(itemNo){
           case 1:
              double oneTotal = 2.98 * userQuantity;
              value = oneTotal;
              break;
           case 2:
              double twoTotal = 4.50 * userQuantity;
              value = twoTotal;
              break;
           case 3:
              double threeTotal = 9.98 * userQuantity;
              value = threeTotal;
              break;
            case 4:
              double fourTotal = 4.49 * userQuantity;
              value = fourTotal;
            case 5:
              double fiveTotal = 6.87 * userQuantity;
              value = fiveTotal;
              break;
                }
      return value;
      

      【讨论】:

        【解决方案6】:

        我不确定您希望在哪个实现中使用它......但是看起来您走在正确的轨道上。

        只需将你的 switch 语句包装成一个方法

        ...
        double total = 0;
        while(loopControl){
        total += getSwitch(switchValue);
        }
        ....
        
        public double getSwitch(switchValue){
        double returnValue = 0;
        switch(switchValue){
        case 1:
            returnvalue = *your formula*;
            break;
        ....
        }
        return returnValue;
        }
        

        编辑为您的开关值传递参数道歉...

        【讨论】:

          【解决方案7】:

          该方法必须只包含完成其工作所需的代码。方法的使用者必须担心如何处理数据。

          对于您的情况,包含此 switch 的方法必须只关心根据参数返回正确的值,以及方法的客户端,例如public static void main(String[] args) 必须评估如何处理执行此方法的结果。

          这可能适用于您的情况:

          public static double yourMethod(int itemNo) {
              double result = 0;
              switch(itemNo) {
                  case 1:
                      result = 2.98 * userQuantity;
                      break;
                  case 2:
                      result = 4.50 * userQuantity;
                      break;
                  case 3:
                      result = 9.98 * userQuantity;
                      break;
                  case 4:
                      result = 4.49 * userQuantity;
                      break;
                  case 5:
                      result = 6.87 * userQuantity;
                      break;
              }
              return result;
          }
          
          public static void main(String[] args) {
              //some code...
              double grandTotal = 0;
          
              //probably this may be in a loop or something similar
              int itemNo = ...;
              //this method is consumer/client of yourMethod, directly noted by line below
              double someValue = yourMethod(itemNo);
              grandTotal += someValue;
          
              //more code...
              //do something with the result e.g. print it so the user may read it
              System.out.println("Grand total: " + grandTotal);
          }
          

          【讨论】:

          • 这不起作用,它没有改变grandTotal的值,它只是忽略了用户的输入并说grandTotal是0.0。此外,我希望它能够通过将五个不同的值相加来将不同的值相加以形成结果(例如,在情况 3 中,它将是 3 = 9.98 * userQuantity;)。
          • @Fyree 确保 double grandTotal 在您的循环之外,如我的代码所示。
          • 我没有循环,是吗?
          • @Fyree 循环可以是以下之一:forwhiledo-while。您在问题中声明您有一个while 循环,因此在循环之前声明grandTotal,即在while 语句之前。
          • while 循环包含我的 switch 语句,让我编辑上面的代码。
          【解决方案8】:

          您可以在 switch 语句之外创建一个变量,并对类的其余部分可见以跟踪返回值:

          public double sumFives = 0; //global variable
          /* some codes */
          switch(itemNo){
              case 1:
                  double oneTotal = 2.98 * userQuantity;
                  return oneTotal;
              case 2:
                  double twoTotal = 4.50 * userQuantity;
                  return twoTotal;
              case 3:
                  double threeTotal = 9.98 * userQuantity;
                  return threeTotal;
              case 4:
                  double fourTotal = 4.49 * userQuantity;
                  return fourTotal;
              case 5:
                  double fiveTotal = 6.87 * userQuantity;
                  sumFives += fiveTotal;
                  return fiveTotal;
              }
          }
          

          在那里,您可以在 switch 语句之后访问总和。如果要跟踪每个单独的返回值,只需使用 ArrayList。

          希望这会有所帮助:)

          【讨论】:

            【解决方案9】:

            有两种方法可以解决此问题,具体取决于您想要做什么。 首先,如果你只想不断地相加,你可以在函数外定义一个变量并不断地递增。

            Eg:
            
            double result = 0.0;
            while(*your condition*){
                //Take itemNo from user
                switch(itemNo){
                    case 1: 
                       result += 2.98 * userQuantity; //The += ensures you are cumulating
                       break;
                    ....
                }
            }
            return result;
            

            或者,如果你想让这些值不同,那么你可以保留一个数组[5]

            double result[5]={0.0, 0.0, 0.0, 0.0, 0.0};
            switch(itemNo){
            case 1:
                result[0] = 2.98 * userQuantity;
                break;
            case 2:
                result[1] = 4.50 * userQuantity;
                break;
            case 3:
                result[2] = 9.98 * userQuantity;
                break;
            case 4:
                result[3] = 4.49 * userQuantity;
                break;
            case 5:
                result[4] = 6.87 * userQuantity;
                break;
            }
            return result; 
            

            这是您可以在切换案例之外明确了解用户输入的内容并对数据进行任何操作。

            【讨论】:

              【解决方案10】:

              在 Java 14 上,您可以使用

              double total = switch(itemNo){
                      case 1 -> 2.98 * userQuantity;
                      case 2 -> 4.50 * userQuantity;
                      case 3 -> 9.98 * userQuantity;
                      case 4 -> 4.49 * userQuantity;
                      case 5 -> 6.87 * userQuantity;
                      };
              

              【讨论】:

                【解决方案11】:

                这也可以写成下面提到的,

                switch(itemNo){
                        case 1:
                            return 2.98 * userQuantity;
                        case 2:
                            return 4.50 * userQuantity;
                        case 3:
                            return 9.98 * userQuantity;
                        case 4:
                            return 4.49 * userQuantity;
                        case 5:
                            return 6.87 * userQuantity;
                        }
                        return 0; //default value
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-09-06
                  • 1970-01-01
                  • 2020-04-16
                  相关资源
                  最近更新 更多