如何更有效地编写此 Java 逻辑代码?

How can I write this Java logic code more efficiently?

我的 activity 中有四个 TextView。根据收到的消息,我想更改这四个 TextView 的格式,使一个更大且粗体,而其余的更小且样式规则。为此,我创建了两个方法,setTextNormal 和 setTextBig。为了更改数字,我使用了这段代码:

                if (tokens[2].equals("0")) {
                    setTextBig(text1);
                    setTextNormal(text2);
                    setTextNormal(text3);
                    setTextNormal(text4);
                }
                if (tokens[2].equals("1")) {
                    setTextBig(text2);
                    setTextNormal(text1);
                    setTextNormal(text3);
                    setTextNormal(text4);
                }
                if (tokens[2].equals("2")) {
                    setTextBig(text3);
                    setTextNormal(text2);
                    setTextNormal(text1);
                    setTextNormal(text4);
                }
                if (tokens[2].equals("3")) {
                    setTextBig(text4);
                    setTextNormal(text2);
                    setTextNormal(text3);
                    setTextNormal(text1);
                }

请注意,对于每个 if 语句,其中一个 TextView 被设置为 big,其余设置为 normal。它有效,但是有没有更有效的方法来设置这些 TextView?

不确定是否真的更有效,但只是先将所有文本设置为正常,然后仅将特定文本更改为大型作品,例如。

setTextNormal(text4);
setTextNormal(text2);
setTextNormal(text3);
setTextNormal(text1);
if (tokens[2].equals("0")) {
    setTextBig(text1);
} else if (tokens[2].equals("1")) {
    setTextBig(text2);
} else if (tokens[2].equals("2")) {
    setTextBig(text3);
} else if (tokens[2].equals("3")) {
    setTextBig(text4);
}

也许你可以做类似的事情。

 setTextNormal(text1);
 setTextNormal(text2);
 setTextNormal(text3);
 setTextNormal(text4);

 if (tokens[2].equals("0")) {
     setTextBig(text1);
 } else if (tokens[2].equals("1")) {
     setTextBig(text2);
 } else if (tokens[2].equals("2")) {
     setTextBig(text3);
 } else if (tokens[2].equals("3")) {
     setTextBig(text4);
 }

检查是否可以将文本设置为正常,然后将其设置为大。

创建一个文本变量数组,例如 [text1, text2, text3, text4]

按照其他用户的建议,在开始时将所有文本设置为正常,然后执行以下操作: setTextBig(texts[tokens[2]]);

我建议将您的代码更改为具有 setTextSize(text, boolean big) 方法,并按如下方式使用它:

String token = tokens[2];
setTextSize(text1, /*big*/token.equals("0"));
setTextSize(text2, /*big*/token.equals("1"));
setTextSize(text3, /*big*/token.equals("2"));
setTextSize(text4, /*big*/token.equals("3"));
void setNormal(){
    setTextNormal(text1);
    setTextNormal(text2);
    setTextNormal(text3);
    setTextNormal(text4);
}

switch(tokens[2]){
    case "0":
        setNormal();
        setTextBig(text1);
        break;
    case "1":
        setNormal();
        setTextBig(text2);
        break;
    case "2":
        setNormal();
        setTextBig(text3);
        break;
    case "3":
        setNormal();
        setTextBig(text4);
        break;
    default:
        break;
}

将重复的相似度提取到一个方法中

setText(字符串大,字符串...小)

// 注意第二个参数是可变参数,它是一个或多个参数

//setTextLarge(大)

//遍历可变参数数组small和setTextSmall

然后使用提取的方法

如果标记为 0 setText(text1, text2, text3)

如果token是2 setText(text2, text1, text3)

如果token是2 setText(text3, text1, text2)

    if (tokens[2].equals("0")) {
            setTextsOrder(text1, text2, text3, text4);
        } else if (tokens[2].equals("1")) {
            setTextsOrder(text2, text1, text3, text4);
        } else if (tokens[2].equals("2")) {
            setTextsOrder(text3, text2, text1, text4);
        } else if (tokens[2].equals("3")) {
            setTextsOrder(text4, text2, text3, text1);
        }
    }
    . 
    .

    private static void setTextsOrder(String text, String... texts) {
        setTextBig(text);
        for (String textIt : texts) {
            setTextNormal(textIt);
        }
    }