我被困在一件简单的事情上。我有一系列名为"标签的布尔值。"能够通过布尔值访问数组的每个元素对我来说很重要:
public boolean energetic, calming, happy, sad;
public boolean[] trackTags = {energetic, calming, happy, sad};
我传入并为 trackTags 数组分配布尔值(让我们说[true,true,true,false]。所以,当我调用trackTags [0]时,我得到" true。"但是,当我打印"精力充沛," - 应该与trackTags [0]相同时,该值始终为false。我知道布尔值初始化为false,但是当我在 trackTags 数组中切换一些值为" true时,"指定元素也不应该更改?
第二个问题:对我来说,与布尔变量名进行交互的好方法是什么?具体来说,如果我传入一个String [] [happy,sad],然后只想切换对应于我的String数组中名称的boolean []值,这是否可行?循环遍历两个数组的元素没有问题,但我显然无法将字符串与布尔值进行比较。
总而言之,是否有更好的方式与布尔名称进行交互?我对此非常困惑。
答案 0 :(得分:11)
这听起来更像是你想要Map
之类的东西。这样,您就可以通过将名称映射为key
到value
来有效地命名值。
示例强>
Map<String, Boolean> trackTags = new HashMap<String, Boolean>();
trackTags.put("energetic", false);
<强> 注 强>
为了获得良好的代码可读性,我还将这些名称放在最后的字段中。
public static final String ENERGETIC = "energetic";
并像这样访问..
trackTags.get(ENERGETIC);
如果您需要更改名称,可以在一个地方更改名称而不是整个节目。
答案 1 :(得分:5)
我传入并为trackTags数组指定布尔值。但是,当我打印出精力充沛的时候,&#34;值始终为false。我知道布尔值初始化为false,但是当我在trackTags数组中切换一些值为&#34; true时,&#34;命名元素也不应该改变吗?
没有。 boolean
是一种基本类型,因此您不存储布尔值的引用,而是存储直接布尔值。
对我来说,与布尔变量名进行交互的好方法是什么?
您无法通过名称获取变量,甚至不能使用反射(不要将变量与类的字段混淆)。请改用Map<String, Boolean>
。
答案 2 :(得分:2)
使用Map的另一种方法是定义一组单独的枚举。
enum tagNames = {energetic, calming, happy, sad};
boolean tags[] = new boolean[4];
然后你可以修改你当前的布尔数组,就像正常一样:
for(int i = 0; i < tags.length; i++){
if (tags[i] == 1)
trackTags[i] = true;
}
但您也可以使用枚举查找特定值:
tags[tagNames.energetic.ordinal()] //returns boolean value at [0]
*我想补充一点,因为可定制性问题,这种方法可能不可取。例如,如果您希望枚举引用另一个偏离0的数组的元素。