当变量需要采用n个唯一的有限值中的一个时,可以使用哪种编程解决方案,其中n大于2?

时间:2017-06-18 21:18:43

标签: architecture logic

为了论证,我们假设所有这些值都是唯一的,不能用范围定义(小于x,但大于y)。

例如,如果我必须代表一个变量,它的值可以是苹果,也可以是香蕉。我可以使用布尔值表示此变量,并假设true表示apple,false表示整个程序中的香蕉。但是,如果该变量可以占用三个值,例如苹果,香蕉和橙子呢?

一种解决方案是将它包装在bean类中,使其成为私有,然后编写一个方法,只允许您设置一个值,如果它是这些'n'值之一,实际上是添加一个检查。

另一种解决方案是制作枚举类型。

但还有什么?

2 个答案:

答案 0 :(得分:1)

绝对不要使用布尔来表示这样的内容。

布隆是为了逻辑价值观;代表 true false 。没有其他的。一旦进入 true 意味着 Apple false 意味着 Banana 业务,您就进入了每个和任何需要处理“水果”的代码都需要理解从布尔到Apple / Banana的这种(任意)映射。

针对此类问题的Java或C ++等语言的正确解决方案:enums。确保编译器理解此类型的“对象”的有效值;而不是发明自己的映射!

答案 1 :(得分:0)

如果按照您的建议,您可以使用boolean代表两个选项,在这种情况下,您知道特定值代表特定对象,在您的情况下是水果(但无法检查它是否为指定范围之一),那么short表示3个或更多,或者byte怎么样?即使char[]string也足够了。

但是,如果您需要检查功能,则需要enumclass

但是,您可以使用包含struct(或short),数组,哈希表或其他列表的byte查找机制,其中包含short可以采用的可能[合法]值,然后在其余代码中散布,您编写访问权限,为short分配值对应于String数组中保存的值。

但是,后一个选项显然与一个类相同,但其方法是 external 。毕竟,类的简单定义是一个包含自己的方法的结构。