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 
} 

을하지만,이 역시 예상 된 결과를 제공하지 않습니다. masterCodeECAB입니다. 다음 출력은 CCBA입니다.

masterCode은 다른 방법으로 중복되지 않도록 임의로 생성 된 문자의 문자열입니다.

질문 : 문제를 해결하는 좋은 방법은 무엇입니까?

+0

'sb'를 초기화합니까? – Eran

+0

'char'가 아닌'char'를 사용하려고 시도하십시오 – roeygol

+1

두 번째 예제에서 :이 문자열을 기존 문자열'masterCode'에 추가합니다. 이 문자열의 이전 내용은 여전히 ​​존재합니다. – Tom

답변

1

예제 1에서 sbStringBuilder sb = new StringBuilder();으로 초기화 되나요? 스택 추적에서 오류를 확인하십시오. 아마도 sb이 null임을 보여줍니다.

예 2의 경우 masterCode = masterCode.concat(Character.toString(c)); 문자가 추가됩니다. 먼저 masterCode = ""으로 설정해야합니다. the docs에 따라이 메서드는 다음과 같습니다.

지정된 문자열을이 문자열의 끝에 연결합니다.

+0

예, 거기에 더 이상 필요가 없기 때문에 슈퍼 클래스에서 선언을 제거한 것을 잊었습니다. 여기에서 다시 사용했습니다. 그것은 여전히 ​​출력에 다른 문자를 제공합니다. 처음으로 출력은 "CDBF"이고 그 후에는 "DCEF"가됩니다. – Arrrow

+0

@Arrrow 새 질문을 작성하면 코드를 추가하십시오. 귀하의 현재 코드가 귀하의 예에서'E'와 같은 완전한 새로운 문자를 "생성"하지 않기 때문에 당신이 다른 곳의 오류라고 생각합니다. – Tom

+0

@Arrrow 당신은 지금이 대답의 결과로 사용하고있는 코드와 함께 그 문제에 대한 새로운 질문이 필요할 것입니다. 귀하의 질문은 잘 쓰여진, 그래서 물어 두려워하지 말고 더 (미안 톰이, 당신의 의견을 내 그래서 더 의미가 만든 후 원래했다,하지만 난이 몇 가지 'R의 너무 삭제와 Arrrow의 이름 철자 및 recommented) –