Почему сравнение строк не выполняется в моем коде? - PullRequest
2 голосов
/ 10 февраля 2011

У меня есть массив, содержащий числа, которые представляют размеры кабеля (1, 1,5, 2,5 и т. Д.), Хранящиеся в виде строк.

В моей программе массив загружается в спиннер, который работает нормально. Однако, когда элемент выбран и сохранен в переменной, я хочу проверить, какая строка была выбрана, и установить для другой числовой переменной значение 2,5, чтобы можно было выполнить вычисление позже в программе.

Я попробовал следующее:

if (conductorSize = "1" ) {conCsa = 1;}
else if (conductorSize = "1.5") {conCsa = 1.5;}

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

Компилятор говорит, что я не могу преобразовать строку в логическое значение. Что происходит?

Ответы [ 5 ]

12 голосов
/ 10 февраля 2011

Если вы проводите сравнение строк, используйте .equals () Пример взят из здесь :

String s = "something", t = "maybe something else";
if (s == t)      // Legal, but usually WRONG.
if (s.equals(t)) // RIGHT <<<<<<<<<<<<< Use this.
if (s > t)    // ILLEGAL
if (s.compareTo(t) > 0) // CORRECT>
3 голосов
/ 10 февраля 2011

Как отмечает Эд С., вы используете оператор присваивания. Однако, поскольку вы сравниваете String, вам нужно использовать метод equals.

if ("1".equals(conductorSize)) {conCsa = 1;}
else if ("1.5".equals(conductorSize)) {conCsa = 1.5;}

В качестве альтернативы вы можете просто создать новый float из вашего String:

float conCsa;
try {
    conCsa = Float.parseFloat(conductorSize);
}catch(NumberFormatException e){
    conCsa = 0.0f; //set to a default value
}
0 голосов
/ 10 февраля 2011

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

0 голосов
/ 10 февраля 2011

В общем случае вам нужно использовать метод .equals ().Если производительность чрезвычайно важна, и вы сравниваете ее со строковыми литералами, взгляните на String.intern () .Это позволит вам делать супер-быстрые сравнения == и избежать полного посимвольного сканирования, как в .equals ().Производительность должна быть действительно очень важной, чтобы оправдать такой нестандартный подход.

0 голосов
/ 10 февраля 2011

Похоже, то, что вы пытаетесь сделать, лучше выразить так:

conCsa = Double.parseDouble(conductorSize);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...