Java 将返回值限制在两个值之间的最短代码
我的Android应用程序中有一个方法,它采用动态设置的字体大小,并按比例返回较小的字体大小。它从getTextSize()获得的值用于标题,较小的out值用于正文。目前,它写为: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
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);