편집 2 : 해결. 특별한 것은 없지만 for-loop는 잘못되었습니다. 죄송합니다.Java 프로그램은 문자열을 초기화하는 첫 번째 재귀 수준에서 종료합니다.
여기가 내 첫 번째 질문입니다. 나는 현재 특정 수입업자 소프트웨어를위한 config.xml을 쉽게 생성 할 수있는 GUI를 개발 중이고 기본적으로 XML에 대한 데이터 구조를 특정 제한으로 작성했습니다. 긴 이야기하자면, 필자는 toString에 대한 대안으로 메소드를 작성하여 모든 데이터를 반복적으로 잘 인쇄합니다. 그리고 재귀에 빠지지 않는 한, 모든 것이 계획대로 진행됩니다. 그러나 최대한 빨리 활성화로 ...
이
코드는 다음과 같습니다 재귀 위해 갈 때private String details(boolean recursiveDetails, int tabs) {
if(recursiveDetails) System.out.println("DEBUG: launched details method with depth="+tabs);
String toStr = space(tabs)+"|============ <"+name+"> ============\n";
//recursion never reaches this point.
if(recursiveDetails) System.out.println("Debug check 1: before recursion with depth="+tabs);
int endlength = 28+name.length();
toStr += (space(tabs)+"| Parent: "+ parent +"\n");
if(contentString!=null && !contentString.equals(""))
toStr += (space(tabs)+"| Content String: \n| " + contentString+"\n");
toStr += (space(tabs)+"| Attributes: " + ((allAttr==null||allAttr.size()==0) ? "---" : "") + "\n");
for(Attribute a : allAttr)
toStr+=(space(tabs)+"| "+a+"\n");
toStr += (space(tabs)+"| Content: " + ((content==null || content.size()==0) ? "---" : "") + "\n");
//recursion!
for(Element e : content)
toStr+=(space(tabs)+"|" + (recursiveDetails ? e.details(true,tabs+1) : (" "+e)) + "\n");
if(recursiveDetails) System.out.println("Debug check 2: after recursion with depth="+tabs);
toStr += space(tabs)+"|";
for(int i=0; i<endlength; i++)
toStr+="=";
return toStr;
}
private String space(int tabs) {
String res="";
for(int i=0; i<tabs; tabs++)
res+=" ";
return res;
}
recursiveDetails
이 참, tabs
는 들여 쓰기 위해 단지이다. content
은이 메소드가 (Element
)에있는 클래스와 동일한 유형의 java.util.List이며 가변 량의 Element-objects를 포함합니다. 모든 Element 및 Attribute 객체에는 유효한 toString()
메서드가 있습니다.
|============ <Catalog> ============
| Parent: <ImportConfig>
| Attributes:
| [Str | Project="null"]
| [Int | Priority="null"]
| Content:
| <Entry>
| <Entry>
|===================================
을하지만 recursiveDetails = true
로 실행하면 나는이 얻을 :
난 작은 테스트 구조에 recursiveDetails = false
와 방법을 실행하면, 내가 할 중단 점을 사용
DEBUG: launched details method with depth=0
Debug check 1: before recursion with depth=0
DEBUG: launched details method with depth=1
을 나는 발견 println 이후의 첫 번째 줄까지 모든 것이 완벽하게 작동합니다. 내가 그 라인을 주석 처리하면, 그 프로그램은 다음 라인에서 종료된다. 예외도없고, 더 이상 인쇄도 없습니다.
대신 +
을 .append()
으로 바꿔서 StringBuilder를 사용해 보았습니다. 나는 또한 a ? b : c
연산자를 피하려고 노력했다. 대신 if
을 사용했다. 결과는 완전히 동일합니다.
누구든지 나에게 설명 할 수 있습니까?
편집 : Java 8 OpenJDK amd64를 사용하여 Ubuntu 16.04 Xenial에서 Eclipse Java Neon을 실행 중입니다.
실제로 재귀 적 방법으로 어떤 문자열이 반환됩니까? 디버거를 사용하여 우리에게 알려주십시오. 도움이 쉽게 될 것입니다 – nhouser9
아무것도 반환되지 않습니다. 프로그램은 재귀에 들어가 자마자 종료되고'DEBUG : depth = 1로 시작된 세부 사항 메소드 '를 출력합니다. 알고리즘이 재귀를 입력하지 않으면 위의 예에서 볼 수있는 것을 반환합니다. – Dracam
MCVE (http://stackoverflow.com/help/mcve)를 제공하십시오. 코드는 현재 작성된 동작을 나타내지 않아야합니다. – nhouser9