Make-shift字符串布尔值?
我正在尝试为我创建的项目创建一种设置系统,但是我遇到了一些问题。我试图使用一个字符串(考虑到这些设置后来必须保存到文本文件)作为转换布尔值。所以,我需要能够在true和false之间切换这个字符串。我认为以下方法可行,但由于某种原因,它始终设置为true,无论如何。就我所知,这是代码中设置变量的唯一位置。Make-shift字符串布尔值?
我不知道为什么下面的代码不应该工作,我做了彻底的搜索无济于事。
if("true".equals(settings[0]))
settings[0] = "false"; //This is *always* skipped
else if("false".equals(settings[0]))
settings[0] = "true";`
因此,我来过这里。
将字符串转换为bool和反转结果。样品
String[] settings = {"tRue"};
boolean settingBool = !Boolean.parseBoolean(settings[0]);
System.out.println(settingBool);
输出:
false
谢谢,这样做而不是我原来的,相当凌乱的方法似乎已经奏效。我不确定为什么,但它仍然是一个解决方案。 – NukeDuck 2013-04-08 20:59:26
一个更好的方法是首先使用布尔值,只有将它们转换为字符串,回来,如果你需要。作为JB Nizet在他的评论中写道,它将使代码更具可读性和可靠性。 在你的情况,那将意味着保持布尔值,而不是字符串:
public static Boolean[] settings = new Boolean[] { Boolean.FALSE, Boolean.TRUE,
Boolean.TRUE, BOOLEAN.FALSE };
要切换布尔值,使用
settings[0] = !settings[0];
要转换为字符串保存设置,使用Boolean#toString
,从阅读设置Boolean#valueOf(String)
。
总结意见:
你检查哪些设置[0]实际上包含?
是的,默认情况下它等于“false”。
设置[0]是否在其他地方更改过?
没有
如果设置[0]是假的,那么你应该期待如果你总是被跳过语句的第一家分店。
当某些数据是布尔值时,应该使用布尔值。保存为字符串时,将此布尔值转换为字符串。加载时,将字符串转换为布尔值。如果遵循此规则,您的代码将更具可读性,更高效且更健壮。 – 2013-04-08 20:41:15
你是否检查过'settings [0]'实际上包含了什么?这是编译器闪耀的时间:) – Maroun 2013-04-08 20:41:43
只要'settings [0]'是“true”或“false”,这个片段就能正常工作。 'settings'的初始值是多少? – iamnotmaynard 2013-04-08 20:42:44