Ken4ward:
このコードは、私が何をしますか、スタックオーバーフローエラーが返されますか?
/* package whatever; // don't place package name! */
import java.io.*;
class myCode
{
public static void main (String[] args) throws java.lang.Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
System.out.println(printStar(Integer.parseInt(input)));
}
private static int printStar(int n){
if(n > 0){
System.out.print("\n hello");
}
return printStar(n-1);
}
}
マシュー旗:
あなたは数2で入力しましょう。
第一コール:printStar(2)
。印刷hello
と通話printStar(1)
。
第二コール:printStar(1)
。印刷hello
と通話printStar(0)
。
第三コール:printStar(0)
。ので、何も印刷されませんn > 0
falseです。しかし、まだ呼び出しますprintStar(-1)
。
あなたのコードは、独立して、nの値の次のステップを呼んでいます。あなたが達成したいものの私の理解では、あなたの再帰呼び出しが内にある必要がありますif
ブロック。場合はn > 0
falseを返すだけのような、何か他のものを返します-1
。
コードは次のようになります。
private static int printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
return printStar(n - 1);
}
return -1;
}
私があれば、私はよく分からないこと、けれども、ポイントに持ってprintStar
値を返すことは良いアイデアです。返される値は常に同じになります。あなたはに方法を変更することができますvoid
。あなたの全体のコードは次のようになります。
public static void main(String[] args) throws java.lang.Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
printStar(Integer.parseInt(input));
}
private static void printStar(int n) {
if (n > 0) {
System.out.print("\n hello");
printStar(n - 1);
}
}