Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Red Planet
49 / 10 / 2
Регистрация: 20.09.2009
Сообщений: 263
#1

Казалось бы, эквивалентные if, но один работает, а второй нет - Программирование Android

21.06.2011, 17:38. Просмотров 1168. Ответов 1
Метки нет (Все метки)

Добрый день! Пишу свое посимвольное сравнение (условия задачи не позволяют equalsIgnoreCase применять). Проблема в том, что при сравнении игнорируется последний символ введенной строки (этот способ закомментирован), в незакомментированном все работает.

Например.
Введенная строка: And
Имена: Andrey, Anton
В список совпадающих вносится: Andrey.
Anton не вносится, так как третья буква t, а не d. Так и должно быть.

В неработающем if последняя буква введенной строки игнорируется.
Например.
Введенная строка: Anw
Имена: Andrey, Anton
В список совпадающих вносится: Andrey, Anton.

Код (неработающий if помечен красным, а работающий зеленым).
ArrayList<String> listOfEqs = new ArrayList<String>();
for (String t: listOfNames) {
int endOfStr = Math.min(etIn.getText().toString().length(), t.length());
int cntOfEqSimbs = 0;
for (int i=0; i<endOfStr; ++i) {
if (t.substring(i, i+1).equalsIgnoreCase(etIn.getText().toString().substring(i, i+1)) && !listOfEqs.contains(t)) {
cntOfEqSimbs++;
} // if.
if (cntOfEqSimbs==etIn.getText().toString().length()) listOfEqs.add(t);


/* if (!t.substring(i, i+1).equalsIgnoreCase(etIn.getText().toString().substring(i, i+1)) || listOfEqs.contains(t))
break;
// listOfEqs.add(t);

*/

} // nested for.
} // for.

twFound.setVisibility(0);
lvOfEqs.setAdapter(new ArrayAdapter<String>(this, android.R.layout.test_list_item, listOfEqs));
} // onClick.
listOfNames - массив строк, источник имен для сравнения.
listOfEqs - массив строк, в который вносятся совпадающие имена.
endOfStr - предел, до которого сравниваем (нужен, так как не знаем, что будет короче: имя или введенная строка.
etIn - EditText, в который вводится строка для сравнения с именем.
cntOfEqSimbs - счетчик совпадающих символов (нужен для отбраковки: если хотя бы одна буква не совпадет, то имя не будет внесено в список совпадающих).

Да, у меня есть работающий if, но неработающий нравится больше, так как там нет лишней переменной cntOfEqSimbs и второго if.

P.S. Не оформил код в нужные теги, так как при этом не получилось бы выделить цветом работающую и неработающую части.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2011, 17:38     Казалось бы, эквивалентные if, но один работает, а второй нет
Посмотрите здесь:
Android На эмуляторе работает, а в смартфоне нет
Запуск другой активности работает на 2.3.3, а на 4.2.2 нет Android
Android Одно приложение вконтакте работает, а второе нет
Запущенный service не работает, когда нет процесса Android
Android Toast в одном случае работает в другом нет
Дело в коде или глюк Студио? Один из пунктов ListView не работает Android
Android Приложение создано, ошибок нет, устанавливается но запустить я его не могу - нет иконки. Что я сделал не так?
Один раз, - нет! Второй, - да! C++
Lazarus В один файл пишется, в второй нет
2 ноута, один вайфай ловит, второй нет
Объединить две записи, в которых один столбец одинаковый, а второй нет SQL Server
C (СИ) Что делать, если один компилятор компилирует без ошибок, а второй - нет?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
binarytoys
2 / 2 / 0
Регистрация: 09.04.2011
Сообщений: 19
22.06.2011, 20:30     Казалось бы, эквивалентные if, но один работает, а второй нет #2
За такой код увольняют сразу и без выходного пособия. Что бы на каждую операцию сравнения символа в позиции создавалось минимум три строки - это надо постараться.
Что помешало сразу привести символы к одному размеру и выполнить простое посимвольное сравнение? Да, строк кода будет больше, но алгоритм прозрачнее и работать будет в разы быстрее.
Yandex
Объявления
22.06.2011, 20:30     Казалось бы, эквивалентные if, но один работает, а второй нет
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru