[英]Java - breaking out of a incursion method and returning the value
大家早上好,
今天是我第一次嘗試制作遞歸方法。 當我以為它會起作用時,我得到了錯誤。 缺少退貨聲明。 這使我感到困惑,因為它在n <1之后確實有一個返回值(來自Stringbuilder的總字符串)
這就是我得到的:
import java.util.Scanner;
public class P5_4MethodRepeatString {
public void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string followed by the times you want
it repeated:");
String input = sc.nextLine();
int count = sc.nextInt();
String total = repeat(input, count);
System.out.println(total);
}
public static String repeat(String str, int n) {
StringBuilder full = new StringBuilder();
if(n < 1) {return full.toString();}
repeat(str, n - 1);
for(int i = 0; i < n; i++){
full.append(str);
}
}
}
if(n < 1) {return full.toString();}
但如果n> = 1,則不返回任何內容。 它應該是return repeat(str, n - 1);
但是然后您需要移動for...
部分
問題的直接原因是,並非repeat()
方法中的所有條件流都具有返回值。 但是我不確定即使進行更改也會導致正常工作的代碼。 考慮以下重構:
public void repeat(StringBuilder result, String str, int n) {
if (n == 0) return;
result.append(str);
repeat(result, str, n - 1);
return;
}
在這里,我們傳入一個StringBuilder
對象,該對象要包含重復的字符串結果。 我們還將傳遞要重復的字符串以及剩余匝數。 基本情況發生在沒有更多轉彎的情況下,在這種情況下,我們僅從遞歸方法中返回。 否則,我們將添加字符串的一個副本並進行遞歸調用。
您最初的遞歸嘗試具有以下for循環:
for (int i=0; i < n; i++) {
full.append(str);
}
這看起來不是遞歸的,循環重復添加字符串會破壞執行遞歸的點(盡管如果必須這樣做,我可能會在現實生活中使用循環)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.