【问题标题】:Issue with switch case in androidandroid中的switch case问题
【发布时间】:2013-07-06 10:15:20
【问题描述】:

为了在 10 个射弹被摧毁后增加等级,我设置了开关盒,在 10 个射弹被摧毁后的第 1 级显示第 2 级,但从第 2 级开始,每 2 个射弹被摧毁,它的等级就会增加,并且等级也会增加到 10 以上,我应该如何让它相差 10 来增加水平。 我就是这样实现的

if (++_projectilesDestroyed > 5)
            {
                _projectilesDestroyed = 0;

            //  for(level=1; level<12; level++)
                switch(level)
                   {
                   case 1:
                       _projectilesDestroyed = 10;
                   System.out.println("case 1");
                                      break;
                   case 2:
                       _projectilesDestroyed = 20; 
                       System.out.println("case 2");
                       break;
                   case 3:
                       _projectilesDestroyed = 30;
                       System.out.println("case 3");
                       break;
                   case 4:
                       _projectilesDestroyed = 40;
                       System.out.println("case 4");
                       break;
                   case 5:
                       _projectilesDestroyed = 50;
                                         break;
                   case 6:
                       _projectilesDestroyed = 60;
                                    break;
                   case 7:
                       _projectilesDestroyed = 70;
                                   break;
                   case 8:
                       _projectilesDestroyed = 80;
                                      break;
                   case 9:
                       _projectilesDestroyed = 90;
                                    break;
                   case 10:
                       _projectilesDestroyed = 100;
                       System.out.println("case 10");
                       break;
                   default: break;
                   }
                 addLevel();

addLevel() 方法。

public void addLevel() {
    level = level + 1;
                showLevel(level);
          }

即使我添加了 break;在第 2 级的所有情况下,它会为每 2 个 projectilesDestroyed 更新,但我希望它达到 10 时。

【问题讨论】:

  • 在这种情况下,如果您只是根据当前级别分配值,则可以使用 _projectilesDestroyed = level * 10 或像 int[] projectilesDestroyed = {10, 20, ... 100} 那样预先填充数组
  • 如果我没听错的话,你是说你的level 每摧毁 2 个射弹就会增加。我认为现在的问题不在于您发布的代码,而在于调用 addLevel() 方法的代码。
  • 你已经完成了代码还是还在等待答案?

标签: java android cocos2d-iphone switch-statement cocos2d-android


【解决方案1】:

你在 case 块之后缺少中断语句。

      case 1:
                   _projectilesDestroyed = 10;
                   System.out.println("case 1");
                   //  missing break here and in the following case staments

如果不把break语句放在case后面,那么下一个case语句会依次执行,以此类推。

【讨论】:

    【解决方案2】:

    您忘记为每个case 添加break 语句。这将是一个失败。

    case 1:
       _projectilesDestroyed = 10; 
        System.out.println("case 1");
        break; // to prevent falling through
    

    JLS 14.11

    如果代码不以这种方式逐个案例,则应使用 break 语句。

    如果其中一个case常量等于表达式的值,那么我们说case匹配,并且switch块中匹配case标签之后的所有语句,如果有的话,按顺序执行。

    【讨论】:

      【解决方案3】:

      跌倒……..

      根据switch docs

      每个 break 语句都会终止封闭的 switch 语句。控制流继续 switch 块之后的第一条语句。

      break 语句是必要的,因为没有它们,switch 块中的语句就会失败:

      您必须在每个案例之后添加break

       switch(level)
                         {
                         case 1:
                             _projectilesDestroyed = 10;
                         System.out.println("case 1");
                         break;
      

      【讨论】:

      • 这仅适用于第一种情况,从第二级开始,每 2 个 ProjectilesDestroyed 更新一次。 @Baadshah
      【解决方案4】:
         case 1:
                 _projectilesDestroyed = 10;
                  System.out.println("case 1");
         break; // missing
      

      您在每种情况下都缺少break 语句。

      每个 break 语句都会终止封闭的 switch 语句。控制流继续 switch 块之后的第一条语句。 break 语句是必要的,因为没有它们,switch 块中的语句就会失败:

      查看文档了解更多信息

      http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

      【讨论】:

      • 感谢您的回复,请参阅我更新的帖子@Raghunandan
      • @jack 您的更新不反映添加中断语句。检查文档和示例SwitchDemoFallThrough。确保你有所有情况下的休息时间。
      • @jack 你正在呼叫addLevel 外部开关。
      • 如果我在开关内调用它,级别不会更新@Raghunandan
      【解决方案5】:

      我猜你的问题出在第一个 if 声明上:

      if (++_projectilesDestroyed > 5)
      

      一旦你摧毁了超过 5 个射弹,你将始终进入街区并增加你的level。你可能需要一些不同的变量,像这样

      if(++_projectilesDestroyed > _projectilesRequired)
      

      并根据您上面的switch-case 声明或使用_projectilesRequired = level * 10 设置您的_projectilesRequired

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 2015-11-26
        • 2014-07-06
        • 2018-08-23
        相关资源
        最近更新 更多