Intereting Posts
NotificationCompat android – как показать только большой значок без малого LinearLayout achartengine Диаграмма не отображается в ScrollView Android: подождите от входа пользователя из диалогового окна? Разница между тегом Uses-Permission и Permissions в AndroidManifest.xml Есть ли AC # IDE для Android-планшета? Невозможно добавить android.support.v7 в мой путь построения проекта. Получить URL-адрес для загрузки видео YouTube (Android / Java) Как вызвать перерисовку родительского представления, когда кто-либо из его детей перерисовывается? Как получить значения RGB растрового изображения в android Отправить HTTPS-запрос на сервер Проблемы с Android Studio Gradle: обнаружена неправильная конфигурация JDK Gradle Eclipse Android Debugger – Где в моем коде я вызывал исключение? Невозможно изменить целевой API в AVD Manager Почему объект Bundle всегда имеет значение null для onCreate ()? Почему метод start () MediaRecorder генерирует исключение IllegalStateException?

Рекурсивный метод работает в java с консолью, но не с android

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

public static void uns(String word, StringBuilder s, List combos) { for(char c: word.toCharArray()) { s.append(c); if(word.length() != 1) { uns(removeChar(word, c),s,combos); } else { combos.add(s.toString()); } s.deleteCharAt(s.toString().length()-1); } } public static List getCombinations(String word) { List<String> combinations = new ArrayList<String>(); uns(word,new StringBuilder(),combinations); return combinations; } public static String removeChar(String s, char c) { int index = s.indexOf(c); return s.substring(0,index)+s.substring(index+1); } 

При тестировании на Java он работал без каких-либо недостатков. По какой-то причине, когда я использую его в Android, список заполняется правильным количеством элементов, но каждый элемент один и тот же. Например, для слова «здесь» он возвращает список, заполненный «eerh».

Solutions Collecting From Web of "Рекурсивный метод работает в java с консолью, но не с android"

Это очень странный сбой (определенно воспроизводимый), и вы можете записать отчет об ошибке.

Однако это временное решение; Вместо использования .toString() , который каким-то образом повторно использует ссылку (даже если я делаю с ней .substring(0) ), поэтому все они обновляются; Если вы распечатаете список после каждой итерации, вы увидите, что я имею в виду.

Вот мое хакерское / неэффективное решение. Изменить:

 combos.add(s.toString()); 

… для:

 combos.add(s + ""); 

Это эффективно корректно клонирует строку в массив, так что они не обрабатываются:

02-17 19:33:48.605: I/System.out(6502): [Combos]: [here, heer, hree, hree, here, heer, ehre, eher, erhe, ereh, eehr, eerh, rhee, rhee, rehe, reeh, rehe, reeh, ehre, eher, erhe, ereh, eehr, eerh]

Я не уверен, но я думаю, что метод valueOf () из класса строк также будет работать. Возможно, попробуйте использовать List вместо StringBuilder, добавьте символы в список и попробуйте String.valueOf (s.get (i)); И это должно преобразовать символ в строку. Я не понимаю, почему выход не будет работать на Android, но вам может понадобиться немного изменить свой цикл. надеюсь, это поможет.