簡體   English   中英

Java-突破入侵方法並返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM