【问题标题】:Reuse same bunch of statements several times多次重复使用相同的语句
【发布时间】:2013-07-18 21:43:48
【问题描述】:

如果这太愚蠢和简单,我很抱歉,但我没有我能想到的所有选择。 它甚至不是真正的编程。但是我在 switch 语句中有几行,我必须多次使用。我想不出任何方法可以存储所有这些代码(这些行)并在我想要的时候重用。

        case 0:
            bcolor=Color.rgb(240, 255, 255);//Azure
            break;
        case 1:
            bcolor=Color.BLACK;
            break;
        case 2:
            bcolor=Color.BLUE;
            break;
        case 3:
            bcolor=Color.rgb(165, 42, 42);//Brown
            break;
        case 4:
            bcolor=Color.rgb(255, 127, 50);//Coral
            break;
        case 5:
            bcolor=Color.rgb(00, 255, 255);//cyan
            break;
        case 6:
            bcolor=Color.rgb(255, 00, 255);//Fuchsia
            break;
        case 7:
            bcolor=Color.rgb(255, 215, 00);//Gold
            break;
        case 8:
            bcolor=Color.GRAY;
            break;
        case 9:
            bcolor=Color.GREEN;
            break;
        case 10:
            bcolor=Color.rgb(173, 255, 47);//Green Yellow
            break;
        case 11:
            bcolor=Color.rgb(00, 255, 00);//Lime
            break;
        case 12:
            bcolor=Color.MAGENTA;
            break;
        case 13:
            bcolor=Color.rgb(80, 00, 00);//Maroon
            break;
        case 14:
            bcolor=Color.rgb(80, 80, 00);//Olive
            break;
        case 15:
            bcolor=Color.rgb(255, 165, 00);//Orange
            break;
        case 16:
            bcolor=Color.rgb(255, 192, 203);//pink
            break;
        case 17:
            bcolor=Color.rgb(80, 00, 80);//purple
            break;
        case 18:
            bcolor=Color.RED;
            break;
        case 19:
            bcolor=Color.rgb(244, 196, 30);//Saffron
            break;
        case 20:
            bcolor=Color.rgb(192, 192, 192);//Silver
            break;
        case 21:
            bcolor=Color.rgb(238, 82, 238);//Violet
            break;
        case 22:
            bcolor=Color.WHITE;
            break;
        case 23:
            bcolor=Color.YELLOW;
            break;

我必须在几个开关条件下使用所有这些开关案例。不可能将它们绑定在某种标签或其他东西中。并在我想使用时给他们打电话...

【问题讨论】:

    标签: android reusability


    【解决方案1】:

    我见过并使用的一个更优化的解决方案是将所有这些值存储在一个映射中(恒定时间复杂度用于查找):

    public static Map<Integer, Integer> colorMap = new HashMap<Integer, Integer>();
    
    static
    {
        colorMap.put(0, Color.rgb(240, 255, 255));
        colorMap.put(1, Color.BLACK);
        colorMap.put(2, Color.BLUE);
        colorMap.put(3, Color.rgb(165, 42, 42));
        colorMap.put(4, Color.rgb(255, 127, 50));
        colorMap.put(5, Color.rgb(00, 255, 255));
        colorMap.put(6, Color.rgb(255, 00, 255));
        colorMap.put(7, Color.rgb(255, 215, 00));
        colorMap.put(8, Color.GRAY);
        colorMap.put(9, Color.GREEN);
        colorMap.put(10, Color.rgb(173, 255, 47));
        colorMap.put(11, Color.rgb(00, 255, 00));
        colorMap.put(12, Color.MAGENTA);
        colorMap.put(13, Color.rgb(80, 00, 00));
        colorMap.put(14, Color.rgb(80, 80, 00));
        colorMap.put(15, Color.rgb(255, 165, 00));
        colorMap.put(16, Color.rgb(255, 192, 203));
        colorMap.put(17, Color.rgb(80, 00, 80));
        colorMap.put(18, Color.RED);
        colorMap.put(19, Color.rgb(244, 196, 30));
        colorMap.put(20, Color.rgb(192, 192, 192));
        colorMap.put(21, Color.rgb(238, 82, 238));
        colorMap.put(22, Color.WHITE);
        colorMap.put(23, Color.YELLOW);
    }
    
    
    public static int getColor(int lookup)
    {
        int color = colorMap.get(lookup);
        return color == null ? 0 : color;
    }
    

    【讨论】:

    • @user2591556 很高兴我能帮上忙!如果它适合您,请务必接受此答案(您将获得 +2 声望)。
    【解决方案2】:

    将此代码包装在一个函数中并调用该函数:

    public int getColor(int i)
    {
        switch(i) {
            case 0:
                return Color.rgb(240, 255, 255);//Azure
            case 1:
                return Color.BLACK;
            case 2:
                return Color.BLUE;
            case 3:
                return Color.rgb(165, 42, 42);//Brown
            case 4:
                return Color.rgb(255, 127, 50);//Coral
            case 5:
                return Color.rgb(00, 255, 255);//cyan
            case 6:
                return Color.rgb(255, 00, 255);//Fuchsia
            case 7:
                return Color.rgb(255, 215, 00);//Gold
            case 8:
                return Color.GRAY;
            case 9:
                return Color.GREEN;
            case 10:
                return Color.rgb(173, 255, 47);//Green Yellow
            case 11:
                return Color.rgb(00, 255, 00);//Lime
            case 12:
                return Color.MAGENTA;
            case 13:
                return Color.rgb(80, 00, 00);//Maroon
            case 14:
                return Color.rgb(80, 80, 00);//Olive
            case 15:
                return Color.rgb(255, 165, 00);//Orange
            case 16:
                return Color.rgb(255, 192, 203);//pink
            case 17:
                return Color.rgb(80, 00, 80);//purple
            case 18:
                return Color.RED;
            case 19:
                return Color.rgb(244, 196, 30);//Saffron
            case 20:
                return Color.rgb(192, 192, 192);//Silver
            case 21:
                return Color.rgb(238, 82, 238);//Violet
            case 22:
                return Color.WHITE;
            case 23:
                return Color.YELLOW;
            default:
                return 0;
        }
    }
    

    【讨论】:

    • 谢谢。我正在创建一个 void 方法,所以它不起作用。现在它完美地工作了......
    【解决方案3】:

    正如小矮人所说,

    将此代码包装在一个函数中并调用该函数。

    你可以这样做(我没有接受你所有的案例):

    private void awesomeColorFunction() {
            case 0:
                bcolor=Color.rgb(240, 255, 255);//Azure
                break;
            case 1:
                bcolor=Color.BLACK;
                break;
            case 2:
                bcolor=Color.BLUE;
                break;
    }
    

    然后像这样在代码中调用它:

    awesomeColorFunction();
    

    但最聪明的方法当然是,正如 Pewiity 所说,将您的颜色放入 xml 文件中

    【讨论】:

    • 我做不到。它显示“令牌“案例”上的语法错误,断言预期”
    • 我的错,只是忘记添加开关线。只需使用 basdward 的答案,他更新了它;-)
    【解决方案4】:

    类似这样的:

    public int getColor(int option){
       switch(option){
       // switch statement in here
       }
       return bcolor;
    }
    

    现在你可以这样称呼它:

    int option = 12 // some option
    int myColor = getColor(option);
    

    【讨论】:

      【解决方案5】:

      首先,在 XML 文件中定义颜色可能是明智之举。

      所以创建这个文件:res/values/colors.xml

      然后像这样添加颜色:

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <color name="azure">#f0ffff</color>
          <color name="brown">#a52a2a</color>
      </resources>
      

      那么你可以将它们用作:

      R.color.azure

      http://developer.android.com/guide/topics/resources/more-resources.html#Color

      【讨论】:

      • 但是我每次使用它时都必须编写每个案例。我在我的应用程序中使用了 5 次相同的颜色案例。所以我每次都必须写下所有 25 种颜色(case0 到 case 24)。
      【解决方案6】:

      如果它们是 switch 语句中唯一的情况,您可以将它们放在返回整数的静态函数中,然后调用它 (bcolor = MyClass.getColor(int switchVariable))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多