2013-04-08 87 views
0

我正在嘗試爲我創建的項目創建一種設置系統,但是我遇到了一些問題。我試圖使用一個字符串(考慮到這些設置後來必須保存到文本文件)作爲轉換布爾值。所以,我需要能夠在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";` 

因此,我來​​過這裏。

+7

當某些數據是布爾值時,應該使用布爾值。保存爲字符串時,將此布爾值轉換爲字符串。加載時,將字符串轉換爲布爾值。如果遵循此規則,您的代碼將更具可讀性,更高效且更健壯。 – 2013-04-08 20:41:15

+1

你是否檢查過'settings [0]'實際上包含了什麼?這是編譯器閃耀的時間:) – Maroun 2013-04-08 20:41:43

+0

只要'settings [0]'是「true」或「false」,這個片段就能正常工作。 'settings'的初始值是多少? – iamnotmaynard 2013-04-08 20:42:44

回答

1

將字符串轉換爲bool和反轉結果。樣品

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

輸出:

false 
+0

謝謝,這樣做而不是我原來的,相當凌亂的方法似乎已經奏效。我不確定爲什麼,但它仍然是一個解決方案。 – NukeDuck 2013-04-08 20:59:26

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)

0

總結意見:

你檢查哪些設置[0]實際上包含?

是的,默認情況下它等於「false」。

設置[0]是否在其他地方更改過?

沒有

如果設置[0]是假的,那麼你應該期待如果你總是被跳過語句的第一家分店。