【问题标题】:How to execute code based on integer value如何基于整数值执行代码
【发布时间】:2014-08-05 15:11:34
【问题描述】:

我有一个 int,int minion1Hp,它的值可以是 0 -> 20。根据它的值,将使用 bar1.setImageResource(R.drawable.hpa);ImageView 设置特定的图像资源。但是,我的代码目前看起来像这样:

    if (minion1Hp == 0) {
        bar1.setImageResource(R.drawable.hp);
    }
    if (minion1Hp == 1) {
        bar1.setImageResource(R.drawable.hpa);
    }
    if (minion1Hp == 2) {
        bar1.setImageResource(R.drawable.hpb);
    }
    if (minion1Hp == 3) {
        bar1.setImageResource(R.drawable.hpc);
    }
    if (minion1Hp == 4) {
        bar1.setImageResource(R.drawable.hpd);
    }
    if (minion1Hp == 5) {
        bar1.setImageResource(R.drawable.hpe);
    }

... 等等。有没有更有效的方法来做到这一点,而不是一长串if 语句?

【问题讨论】:

    标签: java android if-statement int


    【解决方案1】:

    建议:在启动时初始化一个地图(比如onCreate())。像这样:

    mDrawables = new HashMap<Integer, Integer>();
    mDrawables.put(0, R.drawable.hp);
    mDrawables.put(1, R.drawable.hpa);
    ...
    

    那就做吧:

    bar1.setImageResource(mDrawables.get(minion1Hp));
    

    【讨论】:

      【解决方案2】:

      您可以为每个实例使用带有单独 caseswitch 语句。附带说明一下,您不应该只在上面使用 if 语句,您的代码将运行缓慢,您应该使用 else if 使其运行更快(因为您的 hp 永远不能是 1 和 2同一时间。

      例如 switch 语句:

      switch (minion1Hp){ case 1: bar1.setImageResource(R.drawable.hp); break; case 2: bar1.setImageResource(R.drawable.hpa); break;

      等等

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

      【讨论】:

        【解决方案3】:

        这里的改进是将第一个之后的每个if 更改为else if,因为minion1Hp 不能同时是多个值,但是您可能会发现拥有整个东西会稍微整洁一些而是在 switch-case 块中。

        【讨论】:

        • switch 是 meh,它增加了一个额外的中断;在每一行之后。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 2015-09-11
        • 2014-09-20
        相关资源
        最近更新 更多