2015-01-18 2 views
1

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

for (char d : masterCode.toCharArray()) { 
    possibleLetters.add(d); 
} 
Collections.shuffle(possibleLetters); 
for (char c : possibleLetters) { // arraylist of characters 
    sb.append(c); //stringbuilder 
    masterCode = sb.toString(); 
} 

Так что я попытался это по-другому:

masterCode = masterCode.substring(0, 4); 
for (char d : masterCode.toCharArray()) { 
    possibleLetters.add(d); 
} 
Collections.shuffle(possibleLetters); 
for (char c : possibleLetters) { // arraylist of characters 
    //sb.append(c); //stringbuilder 
    masterCode = masterCode.concat(Character.toString(c)); // string 
} 

, но это не дает ожидаемого результата либо. masterCode - ECAB сначала, затем для следующего вывода CCBA.

masterCode - это строка из произвольно сгенерированных символов, не допускающая дубликатов, в другом методе.

Вопрос: что это хороший способ исправить это?

+0

Вы инициализируете 'sb'? – Eran

+0

попытайтесь работать с 'Char', а не' char' – roeygol

+1

Во втором примере: вы добавляете эти символы в существующий String 'masterCode'. Старое содержимое этой строки все еще существует. – Tom

ответ

1

В примере один, вы уверены, что sb инициализирован с использованием StringBuilder sb = new StringBuilder();? Проверьте трассировку стека за ошибку, она, вероятно, показывает, что sb имеет значение NULL.

В примере две строки masterCode = masterCode.concat(Character.toString(c)); добавляет ваших персонажей. Сначала вам нужно установить masterCode = "". Согласно the docs, этот метод:

Объединение указанной строки в конец этой строки.

+0

Да, я забыл, что я удалил объявление в суперклассе, потому что больше не нуждался в нем, а затем использовал его здесь. он все равно дает разные символы на выходе. выход в первый раз: «CDBF», после чего он становится «DCEF» – Arrrow

+0

@Arrrow Если вы напишете новый вопрос, добавьте еще несколько кодов. Я думаю, вы ошибаетесь в другом месте, потому что ваш текущий код не будет «создавать» новые новые символы, такие как «E» в вашем примере. – Tom

+0

@Arrrow Вам понадобится новый вопрос для этой проблемы с кодом, который вы используете в результате этого ответа. Ваши вопросы хорошо написаны, так что не бойтесь задавать больше (извините, Том, ваш комментарий был изначально после моего, поэтому имел больше смысла, но я записал имя Арроура с двумя несколькими «r», так удаленными и рекомментированными) –

Смежные вопросы