Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将返回值限制在两个值之间的最短代码_Java_Android_If Statement - Fatal编程技术网

Java 将返回值限制在两个值之间的最短代码

Java 将返回值限制在两个值之间的最短代码,java,android,if-statement,Java,Android,If Statement,我的Android应用程序中有一个方法,它采用动态设置的字体大小,并按比例返回较小的字体大小。它从getTextSize()获得的值用于标题,较小的out值用于正文。目前,它写为: public int getSmallerTextSize(){ int textSize = (int)Math.round(getTextSize() * 0.8); if(textSize > 20){ textSize = 20; }else if(textSi

我的Android应用程序中有一个方法,它采用动态设置的字体大小,并按比例返回较小的字体大小。它从getTextSize()获得的值用于标题,较小的out值用于正文。目前,它写为:

public int getSmallerTextSize(){
    int textSize = (int)Math.round(getTextSize() * 0.8);

    if(textSize > 20){
        textSize = 20;
    }else if(textSize < 10){
        textSize = 10;
    }

    return textSize;
}

但同样的:对于如此简单的东西,有很多代码。有人能推荐一个优雅的代码(最好是一行代码)来表达这一点吗?

您可以创建一个
limitRange
helper方法

public static int limitRange(int i, int min, int max) {
    if (i > max) {
        i = max;
    } else if (i < min) {
        i = min;
    }
    return i;
}

如果要减少代码中的行数(单行代码)请尝试将两个三元操作合并到一行,如下所示:

  int textSize = (int)Math.round(getTextSize() * 0.8);
  textSize = textSize>20 ?20:textSize<10 ?10: textSize ;
inttextsize=(int)Math.round(getTextSize()*0.8);

textSize=textSize>20?20:textSize我更喜欢显式
return
s,并避免在不必要时使用
else
子句

public int getSmallerTextSize() {
    int textSize = (int) Math.round(getTextSize() * 0.8);
    if (textSize < 10) {
        return 10;
    }
    if (textSize > 20) {
        return 20;
    }
    return textSize;
}
public int getSmallerTextSize(){
int textSize=(int)Math.round(getTextSize()*0.8);
如果(文本大小<10){
返回10;
}
如果(文本大小>20){
返回20;
}
返回文本大小;
}

只有当其他方法使用相同的逻辑时,我才会提取
limitRange
方法。另外,添加两个保存范围限制值的常数也很好。

只需使用以下表达式:

textSize = Math.min(Math.max(textSize,10),20);

谢谢,又短又漂亮。我选择这个作为答案,因为它很短(我要求一行…),尽管它很短,但我不清楚它的意思。我投票支持你回答这个问题,但这肯定是较慢的,因为你保证每次调用两种不同的方法。
public int getSmallerTextSize() {
    int textSize = (int) Math.round(getTextSize() * 0.8);
    if (textSize < 10) {
        return 10;
    }
    if (textSize > 20) {
        return 20;
    }
    return textSize;
}
textSize = Math.min(Math.max(textSize,10),20);