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