【问题标题】:Succincting multiple switch/case statements简化多个 switch/case 语句
【发布时间】:2013-05-31 03:47:56
【问题描述】:

好的,我正在尝试在我的应用程序中简化一些代码。效果很好,我只是有点强迫症,想继续提高性能。

现在有问题的代码如下所示:

switch(ressound){
            case R.id.button40:
            ressound = R.raw.sound40;
            soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote40));
            break;
            }
               switch(ressound){
                case R.id.button900:
                ressound = R.raw.sound900;
                soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote900));
                break;
                }
               switch(ressound){
            case R.id.button901:
            ressound = R.raw.sound901;
            soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(R.string.quote901));
            break;
            }

这是一个音板应用程序,这是关于其中的另存为功能。有什么方法可以简化这些多条语句(有些屏幕有 40 多种声音)?使用循环似乎是一个显而易见的选择,但环顾四周后,case 语句显然必须是静态的,而不是变量。

编辑:忘记包含实际的函数头:

        public boolean function1(int ressound){  

              String soundname = "";

【问题讨论】:

  • 你这里有什么错误吗?
  • 不,它在我的代码中运行良好。我只是不知道如何制作,这样我就不必为每个按钮单独声明

标签: android loops switch-statement code-cleanup


【解决方案1】:
int quoteval=0; 
switch(ressound){
            case R.id.button40:
            ressound = R.raw.sound40;
            quoteval =R.string.quote40;               
            break;
            case R.id.button900:
            ressound = R.raw.sound900;
            quoteval =R.string.quote900;
            break;
            case R.id.button901:
            ressound = R.raw.sound901;
            quoteval =R.string.quote901;
            break;

}
soundname = (this.getString(R.string.app_name)) + " - " + (this.getString(quoteval));

【讨论】:

  • 有效(除了我必须在每个语句中保留最后一行;我需要来自 R.string.quote# 的字符串;而不是 R.raw.sound#),但我正在寻找任何这样我就可以不用为每个按钮列出每个 case 语句了。更改所有数字有点乏味...
【解决方案2】:

有一种方法可以使用循环并消除 switch-case 语句。使用Resources#getIdentifier 方法。假设您使用序号(“sound_filename_1”、“sound_filename_2”等)命名资源,您可以编写如下代码:

private static ArrayList<Integer> findSoundResourceIds(Resources res) {
    ArrayList<Integer> resIds = new ArrayList<Integer>();

    int i = 1;
    do {
        int resId = res.getIdentifier("sound_filename_"+i, "raw", getPackage().getName());
        if (resId == 0) {
            break;
        }
        resIds.add(resId);
        i++;
    } while (true);

    return resIds;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2021-04-11
    • 1970-01-01
    • 2012-11-07
    相关资源
    最近更新 更多