簡體   English   中英

Java遞歸System.out.println()

[英]Java recursive System.out.println()

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
    char c = 0;
    Scanner scan = new Scanner(System.in);
    printeaza(c, scan);
}

public static char printeaza(char c, Scanner sc) {
    c = sc.next().charAt(0);
    if (sc.hasNext()) {
        System.out.println(printeaza(c, sc));
        return c;
    } else {
        return c;
    }
}
}

我想做的是從鍵盤上鍵入字母,然后反向顯示它們。 我知道可以使用for循環和char數組使它變得非常容易,但是我很好奇要遞歸地使用它並且僅使用一個char變量。 我幾乎做到了,但似乎能打印除第一個字母以外的所有字母。

因此,如果我鍵入:“ asdf”而不是“ fdsa”,我只會得到“ fds”。 我想我知道為什么,這是因為Println語句僅在if語句內,但是我對如何使函數也“捕獲”第一個字母有種想法。 希望您可以看看,謝謝!

您對printeaza(c, scan)第一次調用(由public static void main )也需要用System.out.println(..)包裝。

像這樣:

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
        char c = 0;
        Scanner scan = new Scanner(System.in);
        System.out.println(printeaza(c, sc)); // <-- changed line
    }

    public static char printeaza(char c, Scanner sc) {
        c = sc.next().charAt(0);
        if (sc.hasNext()) {
            System.out.println(printeaza(c, sc));
            return c;
        } else {
            return c;
        }
    }
}

結合Cruncher的建議,我會這樣寫:

package test;

import java.util.Scanner;

public class Char {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println(printeaza(sc));
    }

    public static char printeaza(Scanner sc) {
        char c = sc.next().charAt(0);
        if (sc.hasNext()) {
            System.out.println(printeaza(sc));
        } 
        return c;
    }
}

問題在於,對printeaza的調用不會打印其自己的字符,而只會打印其遞歸調用的字符。

換句話說, printeaza(c, scan); main需要更改為System.out.println(printeaza(c, scan);

另外,我想指出的是,像這樣使用遞歸調用進行用戶輸入並不是一個好主意。 :/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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