gpt4 book ai didi

java - 如果使用范围数据,则比 else 更好的解决方案

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:15 25 4
gpt4 key购买 nike

我有一个简单的 java 方法,它根据从 RGB 转换而来的 HSB 值返回颜色。它有效(需要一些调整),但我使用了一系列 else if 和嵌套的 if 语句来返回我想要的数据。我听说 HashMaps 和 String Factories 更好,但我看不出它们如何处理范围数据。有没有更好的解决方案可以处理像这样的范围数据?

片段:

public static String getColorName() {
getHSB(rgb);
if(hsbH >= 45 && hsbH < 75) {
if(hsbS > 0 && hsbS < 45 && hsbB > 70){
return "White/Off White";
} else if(hsbS > 0 && hsbS < 45 && hsbB < 10) {
return "Dark Yellow";
} else {
return "Yellow";
}
} else if(hsbH >= 15 && hsbH < 45) {
if(hsbS > 0 && hsbS < 45 && hsbB > 70){
return "White/Off White";
} else if(hsbS > 0 && hsbS < 45 && hsbB < 10) {
return "Dark Orange";
} else {
return "Orange";
}
...

最佳答案

如果您只有一个范围维度,则可以使用 TreeMapfloorEntry()ceilingEntry() .但是对于多个范围维度,我真的不知道如何实现这一点。

相反,我要做的是指定某种规则对象:

public class Rule{

private int maxH = Integer.MAX_VALUE;
private int maxS = Integer.MAX_VALUE;
private int maxB = Integer.MAX_VALUE;
private int minH = Integer.MIN_VALUE;
private int minS = Integer.MIN_VALUE;
private int minB = Integer.MIN_VALUE;

public Rule maxH(int maxH){this.maxH=maxH;return this;}
public Rule minH(int minH){this.minH=minH;return this;}
public Rule maxS(int maxS){this.maxS=maxS;return this;}
public Rule minS(int minS){this.minS=minS;return this;}
public Rule maxB(int maxB){this.maxB=maxB;return this;}
public Rule minB(int minB){this.minB=minB;return this;}

public boolean appliesTo(HSB hsb){
return minH < hsb.getH() && hsb.getH() < maxH &&
minB < hsb.getB() && hsb.getB() < maxB &&
minS < hsb.getS() && hsb.getS() < maxS ;
}

}

像这样构建它们:

Rule rule = new Rule().maxB(123).minH(45).maxH(122);

并将它们与字符串一起保存在映射中(您可能希望首先实现 equals()/hashCode())。

现在遍历 map 的 entrySet(),当规则适用时,您就有了颜色名称。

关于java - 如果使用范围数据,则比 else 更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7260690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com