Book 클래스의 배열을 만들 겠지만 Book 클래스의 내용은 믿을 수 없지만이 정확한 예제에서 활용할 필요는 없지만 Comparable을 구현했습니다. 나는 String이라는 것을 반환 할 필요가있다. 과거 예제에서 우리는 항상 void를 사용하지만 System.out.println을 사용하도록했습니다. 나는 전체적으로 재귀에 대해 낮은 파악력을 가지고 있으므로 누군가가 도와 주면 크게 감사 할 것입니다. 당신이재귀를 사용하여 객체 배열을 인쇄하는 방법은 무엇입니까?
답변
방법에서 문자열을 반환하려면 감사 당신은 단지 방법 헤더에 그렇게 말 :
public String getName(){
return this.name;
}
당신이 대회는 .toString()
방법을 사용하는 것입니다 객체의 문자열 표현을 반환합니다. String.format()
은 매우 유용합니다.
public String toString(){
return String.format("Name: %s Number of pages: %d", this.name, this.numPages);
}
편집 :
public static String arrayAsString(Book[] books, int startIndex){
if(startIndex > books.length - 1) return null;
String toAppend = arrayAsString(books, startIndex + 1);
if(toAppend == null) return books[startIndex].toString();
else return books[startIndex].toString() + " " + toAppend;
}
재귀가이 문제에 대한 올바른 전략되지 않습니다 :
재귀를 사용하여 이러한 객체의 배열을 인쇄합니다. 숙제 도움을 요청하는 것처럼 들리므로 학교의 TA 나 다른 자료를 질문의 문맥을 더 잘 이해할 수 있도록 참여하는 것이 좋습니다. 당신이 그것을 언급했기 때문에 : Comparable
을 구현하는 것은 배열 인쇄에 필요하지 않습니다. 배열이 인 경우 배열을 입력하려면 Comparable
이 필요합니다. 말했다
귀하의
Book
클래스는 캐릭터 라인 표현을 필요로한다. 자바에서 canonically 당신이toString
방법이 인코딩 :class Book { private String title; // ...other Book methods defined here... public String toString() { return this.title; // Or whatever the correct string representation of your Book is. } }
을 당신이 초기화
Book
의 배열을 가정, 당신의main
기능에 말한다. 일반적으로 목록을 반복해서 인쇄합니다. 그것은 훨씬 간단합니다. 이 답변보기 : How to print out individual Strings from Iterable<String>.그러나 귀하의 질문은 재귀에만 해당됩니다.
- 베이스 케이스
- 재귀 단계
순회 목록 재귀 공통 기본 케이스는 빈리스트 인을위한 함수형 프로그래밍에서 일반적입니다 : 재귀 함수는 항상 두 가지 요소가 필요합니다. Java 배열은이 패턴에 적합하지 않지만 과 같은 일부 구현은
List
입니다. 즉, 재귀 적 단계가 카운터를 증가 시키도록 배열을 사용할 수 있습니다. 이것은 문자 그대로for
루프에서리스트를 반복하는 것에 비해 이점이 없으며, 스택 오버 플로우가 발생하기 쉽다는 큰 단점이 있습니다. 그러나, 당신은
이제public String stringifyBooks(Book[] books, int currentIndex) { // From https://stackoverflow.com/questions/47169798/how-to-print-an-array-of-objects-using-recursion if (currentIndex >= books.length || currentIndex < 0) { // Base case return ""; } else { // Recursive step return books[currentIndex].toString() + ", " + stringifyBooks(books, currentIndex + 1); } }
Book
의 배열 및 초기 인덱스stringifyBooks
를 호출 할 수 있으며 해당 인덱스에서 시작 책의 모든 문자열을 얻을 것이다 ... 재귀에 대해 물었다. 책 배열의 길이보다 큰 초기 색인을 전달하거나 책이 빈 배열 인 경우 어떻게됩니까?직접 해보면이 솔루션이 후행
", "
을 생성합니다. 이 문제를 피하려면 (a) 기본 케이스를 조정하거나 두 번째 "기본 케이스를 추가"하거나 (b) 재귀 함수 호출을 통해 기본 케이스에 도달 한시기를 식별하는 재귀 적 단계를 조정할 수 있습니다 (힌트 : 기본 케이스에 의해 반환 된 값을 확인하고 재귀 적 단계에서이를 계산합니다).재귀 사용은 Java의 스택 크기 제한으로 인해 어려움을 겪습니다. 매우 긴 배열의 책 (10,000 개)에서 시험 해보면 제한에 부딪 힐 수 있습니다. 또한 모든 문자열 연결 비용은 상당히 클 것입니다. 덧붙여 말하면 반복 알고리즘 (예 :
for
루프를 사용하는 문자열)에 문자열을 축적 한 경우 해당 비용을 지불해야합니다. Java는 이런 이유로 내장 된StringBuilder
을 제공합니다.+
연산자를 사용하여 각 재귀 단계에서 문자열을 연결하는 대신 재귀 단계에서StringBuilder
및append
개를 가져 오기 위해 위의 코드를 수정할 수 있는지 확인하십시오. (이 수정 stringifyBooks이String
대신void
을 반환 의미하는 것을 주 -StringBuilder
매개 변수가 반환 가치 본질적으로 끝납니다.)마지막으로, 대신
Book[]
의List<Book>
을 사용하고자하는 경우, 당신은 재귀를 구성 할 수 function 여기서, (1) 기본 케이스가List
의isEmpty
함수를 확인하고""
을 반환합니다. (2) 재귀 적 경우는 목록의 첫 번째 요소의 문자열을 만들고, 첫 번째 요소를 제거하고, 목록의 재귀 함수를 호출 한 다음 첫 번째 요소의 문자열 + 재귀 함수 호출의 결과를 반환합니다. (또는 같은 일을하지만StringBuilder
을 사용합니다.) 이렇게하면currentIndex
변수가 제거됩니다. 이 방법은 책 목록을 파괴하므로 함수를 사용한 후에 필요한 경우 재귀 함수를 호출하기 전에 복제해야합니다.
- 1. 재귀를 사용하여 문자 배열을 역순으로 인쇄하는 방법?
- 2. 화면에 객체 배열을 인쇄하는 방법은 무엇입니까?
- 3. codeigniter-php에서 객체 배열을 인쇄하는 방법은 무엇입니까?
- 4. 재귀를 사용하여 순환 버퍼의 요소 (배열을 사용하여 구현 됨)를 인쇄하는 방법은 무엇입니까?
- 5. WinMips64에서 배열을 인쇄하는 방법은 무엇입니까?
- 6. 파이썬에서 배열을 인쇄하는 방법은 무엇입니까?
- 7. 이 배열을 인쇄하는 방법은 무엇입니까?
- 8. 다차원 배열을 인쇄하는 방법은 무엇입니까?
- 9. mochijson을 사용하여 객체 배열을 인코딩하는 방법은 무엇입니까?
- 10. sinon.js를 사용하여 객체 배열을 일치시키는 방법은 무엇입니까?
- 11. 데이터 형식이있는 배열을 인쇄하는 방법은 무엇입니까?
- 12. 행에 배열을 인쇄하는 가장 쉬운 방법은 무엇입니까?
- 13. gdb에서 Java 배열을 인쇄하는 방법은 무엇입니까?
- 14. 재귀를 사용하여 정렬 방법을 만드는 방법은 무엇입니까?
- 15. 특정 객체 속성의 배열을 기반으로 객체 배열을 필터링하는 방법은 무엇입니까?
- 16. for 루프에서 배열을 인쇄하는 방법은 무엇입니까?
- 17. 배열을 Matlab의 .txt 파일로 인쇄하는 방법은 무엇입니까?
- 18. underscore.js 템플릿에 배열을 인쇄하는 방법은 무엇입니까?
- 19. Java에서 ArrayList의 배열을 인쇄하는 방법은 무엇입니까?
- 20. 2D 배열을 "예쁜"형식으로 인쇄하는 방법은 무엇입니까?
- 21. Java의 jdb 디버거에서 배열을 인쇄하는 방법은 무엇입니까?
- 22. 대괄호없이 Numpy 배열을 인쇄하는 방법은 무엇입니까?
- 23. NSMutableArray에서 객체 변수를 인쇄하는 방법은 무엇입니까?
- 24. 올바른 방법으로 객체 내용을 인쇄하는 방법은 무엇입니까?
- 25. 다양한 크기의 셀을 사용하여 2D 배열을 인쇄하는 방법은 무엇입니까?
- 26. VBA를 사용하여 정렬 된 배열을 단어로 인쇄하는 방법은 무엇입니까?
- 27. 재귀를 사용하여 두 배열을 차례로 인쇄하려면 어떻게해야합니까?
- 28. 재귀를 사용하여 객체 및 배열에 html_entity_decode 적용
- 29. 재귀를 사용하여 데이터를 삽입하는 방법은 무엇입니까?
- 30. 재귀를 사용하여 전력을 계산하는 방법은 무엇입니까?
이것은 기본 재귀를 학습하기에 매우 복잡해 보입니다. 먼저 재귀를 사용하여 일부 숫자 시퀀스 (예 :'1 2 3 ... 10')를 출력하는 것에 익숙해 지십시오. 그런 다음이 작업에 대해 생각하십시오 – Fureeish
@Fureeish 어떻게하는지는 알고 있지만 모든 예제에서는 String 유형으로 출력하지 않지만 항상 void를 사용하므로 출력을 작성하는 방법을 잘 모르겠습니다. –
이 경우 필자는 ** 첫 번째 'n'숫자를 ** 합산하는 재귀 적 방법. 힌트 : 메소드 서명이'int sum (int n)'이라면, 그 메소드 내부의 코드 부분은'return n + sum (n - 1);'이 될 것이다. 조심하십시오 - 결말 조건에 대해 다시 읽으십시오. 기본 재귀를 학습하면 종종 무한 루프 또는 메서드 호출 – Fureeish