2013-02-18 4 views
9

문자열의 문자와 가능한 모든 문자 조합을 가져 오는 재귀 적 메서드를 작성했습니다. 또한 액세스하고 콤보 목록을 반환하는 방법이 있습니다.재귀 메서드는 콘솔에서 java에서는 작동하지만 안드로이드에서는 작동하지 않습니다.

Java에서 테스트 할 때 결함없이 실행되었습니다. 어떤 이유로 Android에서 사용하면 목록에 올바른 요소 수가 채워지지만 모든 요소는 동일합니다. 예를 들어 "here"라는 단어의 경우 "eerh"로 채워지는 목록을 반환합니다.

+0

'removeChar()'의 정의는 무엇입니까? – Eric

+0

@ 에릭 죄송합니다. – Wilson

답변

9

이것은 매우 이상한 글리치 (확실히 재현 가능)이며 이에 대한 버그 보고서를 제출할 수 있습니다.

그러나 임시 해결 방법은 다음과 같습니다. .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]

+0

+1을 직접 시도하고 해결 방법을 제안했습니다. –

+1

@ A - C 나는 그것을 시험해보아야했다. 나는 내 눈으로 그것을 보지 않고 그것을 믿을 수 없었다. :) – Eric

+0

@ 에릭 위대한, 깊이 대답. 감사. – Wilson

0

나는 긍정적이지는 않지만 string class에서 valueOf() 메서드를 생각해보십시오. s는 또한 일할 것이다. 어쩌면 StringBuilder 대신 List를 사용하고 목록에 문자를 추가 한 다음 String.valueOf (s.get (i))를 시도해보십시오. 그 문자를 문자열로 변환해야합니다. Android에서 작동하지 않는 이유는 모르겠지만 루프를 약간 수정해야 할 수도 있습니다. 도움이되는 희망.

+0

아니,'.valueOf()'와 같은 결함. 나는'String.valueOf (StringBuilder)'가 OP의 코드와 동일한'StringBuilder.toString()'을 반환한다고 생각한다. – Eric

관련 문제