2013-04-08 6 views
0

Я пытаюсь создать своего рода систему настройки для проекта, который я создаю, однако я столкнулся с некоторой проблемой. Я пытаюсь использовать строку (учитывая, что эти параметры должны быть впоследствии сохранены в текстовом файле) в качестве логического перехода make-shift. Итак, мне нужно иметь возможность переключать эту строку между true и false. Я предположил, что следующий метод будет работать, но по какой-то причине он всегда устанавливает значение true независимо. Это, насколько мне известно, единственное место в коде, где установлена ​​переменная.Make-shift string boolean?

Я понятия не имею, почему следующий код не должен работать, и я провел тщательный поиск безрезультатно.

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

Поэтому я пришел сюда.

+7

Когда некоторые данные являются логическими значениями, вы должны использовать логическое значение. При сохранении в виде строки преобразуйте это логическое значение в строку. При загрузке преобразуйте строку в логическое. Ваш код будет более читабельным, более эффективным и более надежным, если вы будете следовать этому правилу. –

+1

Вы проверили, какие 'settings [0]' на самом деле содержат? Это время, когда компилятор сияет :) – Maroun

+0

Этот фрагмент работает правильно, если 'settings [0]' is '" true "или' "false". Каково первоначальное значение 'settings'? – iamnotmaynard

ответ

1

Преобразование строки в bool и обратный результат. Образец

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

Выход:

false 
+0

Спасибо, что это, а не мой оригинальный, довольно грязный метод, похоже, сработали. Я не уверен, почему, но это решение тем не менее. – NukeDuck

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] является ложным, то вы должны ожидать первый филиал вашей, если заявление, чтобы всегда быть пропущен.