使用嵌套 switch 语句太多有什么问题吗?

Any problem using nested switch statement too many?

我从未使用过嵌套的 switch 语句。只是想知道在我的代码中使用嵌套的 switch 语句是否合适。 我有 3 个整数变量。 type and position values 0 or 1 on both and item with 06。 我的代码太长了,无论如何要缩短这个:

public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
        type = spinner_type.getSelectedItemPosition();
        position = spinner_pos.getSelectedItemPosition();
        item = spinner.getSelectedItemPosition();
        switch (adapterView.getId()) {
            case R.id.cck_spinner_type:
                switch (pos) {
                    case 0:
                        if(position == 0 && item == 0) {
                            sp_name = "cc_left";
                        } else if(position == 0 && item == 1){
                            sp_name = "cc_left1";
                        } else if(position == 0 && item == 2){
                            sp_name = "cc_left2";
                        }else if(position == 0 && item == 3){
                            sp_name = "cc_left3";
                        }else if(position == 0 && item == 4){
                            sp_name = "cc_left4";
                        }else if(position == 0 && item == 5){
                            sp_name = "cc_left5";
                        }else if(position == 0 && item == 6){
                            sp_name = "cc_left6";
                        }else if(position == 1 && item == 0) {
                            sp_name = "cc_right";
                        } else if(position == 1 && item == 1){
                            sp_name = "cc_right1";
                        } else if(position == 1 && item == 2){
                            sp_name = "cc_right2";
                        }else if(position == 1 && item == 3){
                            sp_name = "cc_right3";
                        }else if(position == 1 && item == 4){
                            sp_name = "cc_right4";
                        }else if(position == 1 && item == 5){
                            sp_name = "cc_right5";
                        }else if(position == 1 && item == 6){
                            sp_name = "cc_right6";
                        }
                        break;
                    case 1:
                        if(position == 0 && item == 0) {
                            sp_name = "ccL_left";
                        } else if(position == 0 && item == 1){
                            sp_name = "ccL_left1";
                        } else if(position == 0 && item == 2){
                            sp_name = "ccL_left2";
                        }else if(position == 0 && item == 3){
                            sp_name = "ccL_left3";
                        }else if(position == 0 && item == 4){
                            sp_name = "ccL_left4";
                        }else if(position == 0 && item == 5){
                            sp_name = "ccL_left5";
                        }else if(position == 0 && item == 6){
                            sp_name = "ccL_left6";
                        }else if(position == 1 && item == 0) {
                            sp_name = "ccL_right";
                        } else if(position == 1 && item == 1){
                            sp_name = "ccL_right1";
                        } else if(position == 1 && item == 2){
                            sp_name = "ccL_right2";
                        }else if(position == 1 && item == 3){
                            sp_name = "ccL_right3";
                        }else if(position == 1 && item == 4){
                            sp_name = "ccL_right4";
                        }else if(position == 1 && item == 5){
                            sp_name = "ccL_right5";
                        }else if(position == 1 && item == 6){
                            sp_name = "ccL_right6";
                        }
                        break;
                }
                break;

            case R.id.cck_spinner_pos:
                switch (pos) {
                    case 0:
                        if(type == 0 && item == 0) {
                            sp_name = "cc_left";
                        } else if(type == 0 && item == 1){
                            sp_name = "cc_left1";
                        } else if(type == 0 && item == 2){
                            sp_name = "cc_left2";
                        }else if(type == 0 && item == 3){
                            sp_name = "cc_left3";
                        }else if(type == 0 && item == 4){
                            sp_name = "cc_left4";
                        }else if(type == 0 && item == 5){
                            sp_name = "cc_left5";
                        }else if(type == 0 && item == 6){
                            sp_name = "cc_left6";
                        }else if(type == 1 && item == 0) {
                            sp_name = "ccL_left";
                        } else if(type == 1 && item == 1){
                            sp_name = "ccL_left1";
                        } else if(type == 1 && item == 2){
                            sp_name = "ccL_left2";
                        }else if(type == 1 && item == 3){
                            sp_name = "ccL_left3";
                        }else if(type == 1 && item == 4){
                            sp_name = "ccL_left4";
                        }else if(type == 1 && item == 5){
                            sp_name = "ccL_left5";
                        }else if(type == 1 && item == 6){
                            sp_name = "ccL_left6";
                        }
                        break;
                    case 1:
                        if(type == 0 && item == 0) {
                            sp_name = "cc_right";
                        } else if(type == 0 && item == 1){
                            sp_name = "cc_right1";
                        } else if(type == 0 && item == 2){
                            sp_name = "cc_right2";
                        }else if(type == 0 && item == 3){
                            sp_name = "cc_right3";
                        }else if(type == 0 && item == 4){
                            sp_name = "cc_right4";
                        }else if(type == 0 && item == 5){
                            sp_name = "cc_right5";
                        }else if(type == 0 && item == 6){
                            sp_name = "cc_right6";
                        }else if(type == 1 && item == 0) {
                            sp_name = "ccL_right";
                        } else if(type == 1 && item == 1){
                            sp_name = "ccL_right1";
                        } else if(type == 1 && item == 2){
                            sp_name = "ccL_right2";
                        }else if(type == 1 && item == 3){
                            sp_name = "ccL_right3";
                        }else if(type == 1 && item == 4){
                            sp_name = "ccL_right4";
                        }else if(type == 1 && item == 5){
                            sp_name = "ccL_right5";
                        }else if(type == 1 && item == 6){
                            sp_name = "ccL_right6";
                        }
                        break;
                        default:
                            Toast.makeText(getContext(),"ERR 208",Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.cck_spinner:

                switch (pos) {
                    case 0:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right";
                        } else {
                            Toast.makeText(getContext(), "You can't change LABEL of this key", Toast.LENGTH_SHORT).show();
                        }
                        break;
                    case 1:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left1";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right1";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left1";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right1";
                        }
                        break;
                    case 2:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left2";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right2";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left2";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right2";
                        }
                        break;
                    case 3:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left3";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right3";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left3";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right3";
                        }
                        break;
                    case 4:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left4";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right4";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left4";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right4";
                        }
                        break;
                    case 5:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left5";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right5";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left5";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right5";
                        }
                        break;
                    case 6:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left6";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right6";
                        } else if (type == 1 && position == 0) {
                            sp_name = "ccL_left6";
                        } else if (type == 1 && position == 1) {
                            sp_name = "ccL_right6";
                        }
                        break;


                    default:
                        if (type == 0 && position == 0) {
                            sp_name = "cc_left";
                        } else if (type == 0 && position == 1) {
                            sp_name = "cc_right";
                        } else {
                            Toast.makeText(getContext(), "You can't change LABEL of this key", Toast.LENGTH_SHORT).show();
                        }
                }
                break;
        }
        pfKey4.setHint(sp.getString(sp_name, "not_found"));

    }     

所以看起来 sp_name 只是根据这 3 个变量和 adapterView.getId() 而改变,而您没有进入。根据您的代码,我相信如果 position 是 0 那么名字已经离开,或者如果 1 那么名字就正确了。如果大于0,最后的数字是item。而type 0 表示它以cc_开头,type 1 表示ccL_。我会创建一个简短的函数来创建 sp_name.

String sp_name="";
// type
if(type==0)
  sp_name="cc_";
else
  sp_name="ccL_";
//position
if(pos==0)
  sp_name+="left";
else
  sp_name+="right";
//item
if(item>0)
  sp_name+=(item+"");
return sp_name;

喜欢@deperm 的回答,但更短。

return (type == 0 ? "cc_" : "ccL_") +
       (pos == 0 ? "left" : "right") +
       (item > 0 ? "" + item : "");