0

底面ではなく先端にあるアスタリスクから三角形を作成する方法を考えていました。

私はそれをそのベースに立てるためのコードを持っています:

    public static String printTriangle (int count) 
{
    if( count <= 0 ) return "";

    String p = printTriangle(count - 1);
    p = p + "*";
    System.out.print(p);
    System.out.print("\n");

    return p;
 }

しかし、それから私は、一番上に星の数を最大にし、次に少ない数にする方法に行き詰まっています。(count - p) 行の入力を減少量から差し引くという条件に沿って何かを考えていましたが、p は文字列であるため、この考えに混乱しました。

編集: 繰り返しなしで元の方法を使用して printTriangle(count - 1) の位置を変更しようとしましたが、各行に 1 つの星を獲得しました。どうすればこれを修正できますか?

public class triangles 
{
public static void main(String[] args)
{
    printTriangle(5);
}
public static String printTriangle (int count) 
{
    if( count <= 0 ) return "";
      String p = "";
    p = p + "*";
    System.out.print(p);
    System.out.print("\n");
     p = printTriangle(count - 1);
    return p;

         }


}
4

2 に答える 2

1

私には、各行の *s に正しい番号を追加するための再帰関数内のループが欠落しているように見えます。

  public static String printTriangle (int count) 
  {
      if( count <= 0 ) return "";

      String p = printTriangle(count - 1);
      for (int i=0; i<count; i++)
      {
        p = p + "*";
      }

      p += "\n";
      return p;
   }

そして、次のようにコードを呼び出します

String triangle = printTriangle(4);
System.out.println(triangle);

それが生み出す

*
**
***
****

また、この目的のために文字列ではなく StringBuilder を使用します。

質問を読み直してください。

あなたはこのような三角形を求めていた

****
***
**
*

再帰が呼び出されるときに変更する必要があります。

すなわち

  public static String printTriangle (int count) 
  {
      if( count <= 0 ) return "";

      String p="";
      for (int i=0; i<count; i++)
      {
        p = p + "*";
      }

      p += "\n";
      return p + printTriangle(count - 1);
   }
于 2012-09-19T02:40:45.577 に答える
0

@レオン、あなたの答えは正しいですが、彼の質問の一部を見逃しています。

編集: @Leon、回答を更新したようです。私のはもう必要ありません。

先端に立っている三角形の場合は、次を試してください

public static String printTriangle (int count) 
{
  if( count <= 0 ) return "";

  String p = "";
  for (int i=0; i<count; i++)
  {
    p = p + "*";
  }
  p += "\n";

  p += printTriangle(count - 1)

  return p;
}
于 2012-09-19T03:02:03.273 に答える