如何避免if else的多重链

时间:2016-05-14 16:11:44

标签: c

您好我有一段代码如下,我想避免多个if else,是否有更好的方法:

if(strcmp(somename, "some") == 0)
{
    fun();
}
else if(strcmp(somename,"some1") == 0)
{
    fun();
}
else if(strcmp(somename,"some2") == 0)
{
    fun();
}
else if(strcmp(somename,"some3") == 0)
{
    fun();
}

3 个答案:

答案 0 :(得分:7)

您可以使用指向指针和循环的指针:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pythagoras);

    aNumPyt = (EditText) findViewById(R.id.aNumPyt);
    bNumPyt = (EditText) findViewById(R.id.bNumPyt);
    cNumPyt = (EditText) findViewById(R.id.cNumPyt); //Forgot to add this line of code

    pythagorasCalcu = (Button) findViewById(R.id.pythagorasCalcu);

    pythagorasResultFinal = (TextView) findViewById(R.id.pythagorasResultFinal);

    // set a listener
    pythagorasCalcu.setOnClickListener(this);
}

答案 1 :(得分:-1)

为要调用的somenamestd::function个实例创建一个映射(有序或无序)映射值。

答案 2 :(得分:-1)

您可以尝试使用switch个案例的简单方法。例如,您可以像

一样使用它
switch(somename) {
    case "some1" :
        fun1();
        break;
    case "some2" :
        fun2();
        break;
    case "some3" :
        fun3();
        break;
    default :
        //some default case
}

你也可以在str2int中使用c++11,以防开关无法正常使用字符串

switch(str2int(somename)) {
    case str2int("some1") :
        fun1();
        break;
    case str2int("some2") :
        fun2();
        break;
    case str2int("some3") :
        fun3();
        break;
    default :
        //some default case
}