【问题标题】:Using random numbers in switch/case statement in java在 java 中的 switch/case 语句中使用随机数
【发布时间】:2020-06-27 01:05:56
【问题描述】:

想在 Java 中使用 switch 语句,但 switch 语句中的变量 (switch(variable)) 应该与 case 语句中的随机数 (case(randomNumber)) 进行比较。但我收到这样的错误消息:“case 表达式必须是常量表达式”。 那么我的案例陈述不适用于随机数吗?我认为错误消息意味着我必须在变量前加上“final”,但这也不起作用。 那么,if ... else 语句是唯一的方法吗?我希望我能很好地解释我的问题以便理解。 (我只是从 java 和编码附带的整个术语开始)

       int number = 6; //some number between 0-9
   int randomNumber1 = ((int)(Math.random() * 10));
   int randomNumber2 = ((int)(Math.random() * 10));
   int randomNumber3 = ((int)(Math.random() * 10));
   
   switch(number)
   {
   case(randomNumber1):
       //some code here
   case(randomNumber2):
       //some code here    
   case(randomNumber3):
       //some code here
   default:
       //some code here
   }

【问题讨论】:

  • 我通过创建新变量并执行 case(variable) 对此进行了测试,但这甚至都不起作用,这令人惊讶。
  • 考虑到 switch 语句的目标必须是常量,这并不奇怪。

标签: java switch-statement case-statement


【解决方案1】:

它不工作的原因是因为你在做

案例(变量)

当我将其更改为实际数字时,它开始为我工作。它说需要常量表达式,因为它需要一个实际的数字,而不是存储在变量中的数字。

希望对你有帮助

【讨论】:

    【解决方案2】:

    如上所述,case (expression): 语句中的 (expression) 必须是常量。

    至于 if-else 是唯一的方法,另一种可能性(取决于您总体上要做什么)是使用随机数作为映射中的键,对象的值具有可以执行的方法执行您想要的操作。

        Interface MyAction
        {
            public void doMyAction() {};
        }
    
        public class Eight implements MyAction
        {
            public void doMyAction() { System.out.println("I'm an eight"); }
        }
    
        public class Four implements MyAction
        {
            public void doMyAction() { System.out.println("I'm a four"); }
        }
    
        // ...
        HashMap<Integer, MyAction> actionMap = new HashMap<>();
        actionMap.put(8, new Eight());
        actionMap.put(4, new Four()); 
    
        // ...
        MyAction myAction = actionMap.get(randomNumber);
        if (myAction == null) { System.out.println("Don't have one of those"); }
            else { myAction.doMyAction(); }
    

    很难看出您要实现的总体目标是什么,这可能就是您没有得到更多回应的原因——这里的人们通常不喜欢提出可能被证明是“错误”的东西,即使对于没有完全解释的情况。

    【讨论】:

      【解决方案3】:

      从您收到的错误中可以看出,switch 只能与constant expressions 一起使用。要实现您想要的,您只能使用带有ifelse ifelse 的分支。

      if(number == randomNumber1){
          //some code here
      } else if(number == randomNumber2){
          //some code here
      } else if(number == randomNumber3){
          //some code here
      } else {
          //some code here
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-06
        • 2016-09-19
        • 2013-09-24
        • 1970-01-01
        • 2021-02-19
        相关资源
        最近更新 更多