【问题标题】:Android - Optimising multiple if-statementsAndroid - 优化多个 if 语句
【发布时间】:2011-07-15 23:12:46
【问题描述】:

在我的应用程序中,我有许多可以优化的 IF 语句,但我终其一生都无法找到一个没有错误的好的解决方案。

我当前的代码:

    if (User_XP > -1){User_level.setText("1");Minimum_Level= Level1; Maximum_level = Level2;}
    if (User_XP > Level1){User_level.setText("1");Minimum_Level= Level1; Maximum_level = Level2;}
    if (User_XP > Level2){User_level.setText("2");Minimum_Level = Level2; Maximum_level = Level3;}
    if (User_XP > Level3){User_level.setText("3");Minimum_Level = Level3; Maximum_level = Level4;}
    if (User_XP > Level4){User_level.setText("4");Minimum_Level = Level4; Maximum_level = Level5;}
    if (User_XP > Level5){User_level.setText("5");Minimum_Level = Level5; Maximum_level = Level6;}
    if (User_XP > Level6){User_level.setText("6");Minimum_Level = Level6; Maximum_level = Level6;}
    if (User_XP > Level7){User_level.setText("7");Minimum_Level = Level7; Maximum_level = Level6;}
    if (User_XP > Level8){User_level.setText("8");Minimum_Level = Level8; Maximum_level = Level6;}
    if (User_XP > Level9){User_level.setText("9");Minimum_Level = Level9; Maximum_level = Level6;}

它的想法是从游戏中计算出用户等级,并从中创建一个百分比。但是这个编码领域确实效率不高,因为它会产生多个错误,有人对可能的解决方案有任何提示吗? 请询问是否需要更多信息。

【问题讨论】:

  • 我建议使用 switch 语句。
  • 我会调查的,谢谢。
  • switch 语句测试是否相等。如果您想测试某个范围内的数字,那么开关对您没有帮助。
  • 你想为优化什么?可读性还是速度?
  • 是的,确实如此。我一开始没有看到。对不起。

标签: java android optimization if-statement


【解决方案1】:

在这种情况下,我更喜欢制作静态 [不是 java 关键字] propertiesfile/map/table 并将详细信息存储在 properties、map 或 table 中。然后在运行时从映射中读取并设置适当的值或做事。此帮助无需编码即可扩展,只需向

中添加值即可

【讨论】:

    【解决方案2】:

    为什么不做一些更通用的东西?...

    if (User_XP > Minimum_Level) {
        User_level.setText(Integer.toString(++Minimum_Level));
    }
    

    当然,如果需要最小/最大值而不是仅仅进行计算..

    if (User_XP > Minimum_Level) {
        User_level.setText(Integer.toString(++Minimum_Level));
        Maximum_Level = Minimum_Level + 1;
    }
    

    如果你想限制绝对数量,如果像if(Minimum_Level == 10) return; //Too much awesome!这样的级别,你可以事先添加边界检查

    【讨论】:

      【解决方案3】:

      也许将您的关卡经验要求存储在一个数组中并使用循环。

      int[] levels = new int[] { -1, Level1, Level2, Level3 };
      
      int level;
      for (level = 0; level < levels.length && userXp < levels[level]; level++) { }
      int minLevel = levels[level];
      int maxLevel = levels[level + 1];
      userLevelText.setText(Integer.toString(minLevel));
      

      【讨论】:

        【解决方案4】:

        好像 User_level.setText(String.valueOf(User_XP-1);Minimum_Level = User_level;Maximum_level = User_XP;

        或该行中的某些内容可以完成这项工作。关键是那里似乎有一些逻辑,你应该能够一起消除 if 语句。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-18
          • 2010-09-07
          • 2013-09-17
          相关资源
          最近更新 更多