0

我正在尝试为我正在创建的项目创建一种设置系统,但是我遇到了一些问题。我正在尝试使用字符串(考虑到这些设置以后必须保存到文本文件中)作为临时布尔值。所以,我需要能够在真假之间切换这个字符串。我认为以下方法会起作用,但由于某种原因,无论如何它总是设置为 true。据我所知,这是代码中唯一设置变量的地方。

我不知道为什么下面的代码不应该工作,我已经彻底搜索无济于事。

if("true".equals(settings[0])) 
   settings[0] = "false";             //This is *always* skipped
else if("false".equals(settings[0])) 
   settings[0] = "true";`

因此,我来​​到了这里。

4

3 回答 3

1

将字符串转换为布尔值和逆结果。样本

String[] settings = {"tRue"};
boolean settingBool = !Boolean.parseBoolean(settings[0]);
System.out.println(settingBool);

输出:

false
于 2013-04-08T20:49:24.353 回答
0

更好的方法是首先使用布尔值,并且仅在需要时将它们转换为字符串并返回。

正如 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)

于 2013-04-08T20:58:58.397 回答
0

总结评论:

您是否检查了 settings[0] 实际包含的内容?

是的,默认情况下它等于“假”。

设置 [0] 是否在其他任何地方更改?

如果 settings[0] 为假,那么你应该期望你的 if 语句的第一个分支总是被跳过。

于 2013-04-08T21:00:12.157 回答