2017-11-16 3 views
-4

私のコード出力を下の画像のようにするのに助けが必要です。私は何が間違っているのか分かりませんし、コード出力をインデントして、インデントする。ここで私のコードが次のようになるのを助ける必要があります:

は、現在、私のコードです:ここでは

// Fig. 18.3: FactorialCalculator.java 
// Recursive factorial method. 

public class Assignment_6_1 
{ 
    // recursive method factorial (assumes its parameter is >= 0 
    static StringBuilder s = new StringBuilder(); 

    public static long factorial(long number) 
{ 
     if (number == 0) // test for base case 
     { 
      return 1; 
     } else {// recursion step   
      if (s.length() == 0) { 
       s.append(number).append("*").append(number - 1); 
      } else { 
       for (int i = 0; i < s.length(); i++) { 

       } 
       System.out.println(number + " * " + (number - 1) + "!"); 
       s.append("*").append(number).append("*").append(number - 1); 
      } 
      return number * factorial(number - 1); 
     } 
    } 

    // output factorials for values 0-21 
    public static void main(String[] args) { 
     System.out.println("Hannah Coffey - Lab 6"); 
     // calculate the factorials of 0 through 20 
     for (int counter = 0; counter < 25; counter++) { 
      s = new StringBuilder(); 
      System.out.println(counter + "!"); 
      System.out.printf("%d! = %d%n", counter, factorial(counter)); 
     } 
    } 
} // end class FactorialCalculator 

は、私はそれが私が間違っているのかわからように見えなくするために必要なものです:

enter image description here

どれヘルプをいただければ幸いです。

私のプログラムは現在、次のようになります。 enter image description here

+0

そして、何の出力は、現在のように見えるのでしょうか? – stdunbar

+1

このコードではデバッグの証拠がないので、私はこの質問をd​​ownvotedしました。あなたの質問を編集して、あなたのデバッグが明らかにしたことと、特定のコード行に関する特定の質問を表示してください。参照:[最小限で完全で検証可能な例の作成方法](http://stackoverflow.com/help/mcve)と[小規模プログラムのデバッグ方法](https://ericlippert.com/2014/03/05)/how-to-debug-small-programs /) –

+0

出力が現在どのようなものであるかの写真を追加しました –

答えて

-2
public static long factorial(long number){ 
     if (number == 0) // test for base case 
     { 
      return 1; 
     } else {// recursion step 
      if (s.length() == 0) { 
       s.append(number).append("*").append(number - 1); 
      } else { 
       String spaces = ""; 
       for (int i = 0; i < number; i++) { 
        spaces = spaces+" "; 
       } 
       if(number==1) 
        System.out.println(" Base Case: 1"); 
       else { 
        System.out.println(spaces + "Recursive call:" + number + " * fact(" + (number - 1) + ")"); 
        s.append("*").append(number).append("*").append(number - 1); 
       } 
      } 
     return number * factorial(number - 1); 
     } 
    } 

public static void main(String[] args) { 
    System.out.println("Hannah Coffey - Lab 6"); 
    // calculate the factorials of 0 through 20 
    for (int counter = 0; counter < 25; counter++) { 
     s = new StringBuilder(); 
     for (int i = 0; i < counter; i++) { 
      spaces = spaces+" "; 
     } 
     System.out.println(spaces+"Recursive call:"+counter + "!"); 
     System.out.printf("%d! = %d%n", counter, factorial(counter)); 
    } 
} 
+0

それは構文エラーがあると言います。 –

+0

ありがとうございました。助けてくれてありがとう!! –

+0

'spaces +" "'は効率的ではありません...それぞれの繰り返しで 'String'をインスタンス化します。 – AxelH

0

することができますパッド、このようなString.formatを使用してString

String.format("%10s", "foo"); 

それは7つのスペース7 + foo.length = 10;

の左パディングを作成します。

これで、そのような動的な表現ができます:

public static String padding(int i) { 
    return i == 0 ? "" : String.format("%" + i + "s", ""); 
} 

スペースの数を渡してフォーマッタにジョブを実行させるだけです。

for(int i = 5; i >= 0; --i){ 
    System.out.println(padding(i) + "i"); 
} 

は出力:

 5 
    4 
    3 
    2 
1 
0 
関連する問題