0

これは宿題の質問なので、答えではなく助けが欲しいです。

ユーザーが入力した数値に基づいて、数値から 2 つの三角形を作成しようとしています。

"Enter a number between 2-9: "3"
1
12
123

  1
 21
321

IE2:

"Enter a number between 2-9: "5"
1
12
123
1234
12345

    1
   21
  321
 4321
54321

最初の三角形を完成させることができました。しかし、ネストされたループを追加すると、ネストされたループから展開された数字で最初の三角形が台無しになります。また、すべての数字を垂直の直線に配置します。さまざまなネスト ループのバリエーションを試し、 をいじってみましたStringBuilderが、それでも失敗しました。これまでのコードは次のとおりです。

import java.util.Scanner;

public class NestedLoops
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);

        System.out.print("Enter a Number between 2-9: ");
        int width = input.nextInt();

        String r = "";
        for (int i = 1; i <= width; i++)
        {
            r = r + i;
            System.out.println(r);

        }

    }

}

繰り返しますが、私は単なる答えではなく、助け/理解を求めています。

4

6 に答える 6

1

質問の2番目の部分には2つの側面があります。

  1. 逆の順序で数字を使用して文字列を生成する必要があります。

    • 反対側に数字を追加することでこれを行うことができます。
    • 弦を逆にすることでこれを行うことができます。
  2. 左にスペースがあるように配置する必要があります。

    • これを行うには、文字列の左端に必要な数のスペースを追加します。
    • これを行うには、 System.out.format(...) を使用して、フィールド内の文字列を必要な文字数で右揃えにするテンプレートを使用します。(OK、それは少しあいまいすぎる...)

または、文字列連結を使用するのではなく、文字配列または文字列ビルダーで文字列を構築できます。

「トリック」は、コードのカットを開始する前に、どの戦略を使用するかを理解することです。

于 2013-02-17T04:01:35.803 に答える
0
public static void main(String[] args)
{
    int n = 5;

    for(int i=1; i<=n; i++)
    {            
        for (int j=(n*2), k=n; j>1; j--) 
        {
            if (k <= i) 
            {
                System.out.print(k);
            } 
            else 
            {
                System.out.print('*');
            }

            k += (j)-1 > n ? -1 : 1;
        }

        System.out.println();
    }
}
于 2013-02-17T04:32:20.667 に答える
0

キューを使用する必要があります。例えば。http://docs.oracle.com/javase/1.5.0/docs/api/java/util/LinkedList.html

最大数に達するまで数値をエンキューしてから、デキューを開始します。

そして、デキューしている間、逆を適用する必要があります

Queue<String> q = new LinkedList<String>();
        for (int i = 1; i <= width; i++)
        {
            r = r + i;
            q.add(r);
            System.out.println(r);

        }

        while(!q.isEmpty()){
            String j = q.remove();
             //reverse j
            System.out.println(reverse(j));
        }

私はあなたがするために逆の部分を残します:)

于 2013-02-17T03:29:34.100 に答える
0

次のような最初のループの後に別のループを追加できますか

String r = "";
String space = "";
    for (int i = width; i >= 1; i--)
    {
        r = r + i;
        System.out.println(r);

    }

それを試してみてください。まだテストされていません

于 2013-02-17T03:36:05.647 に答える
0

試す

    int width = 5;
    // for all lines; number of lines = width
    for (int line = 1; line <= width; line++) {
        // print numbers from 1 to current line number  
        for (int n = 1; n <= line; n++) {
            System.out.print(n);
        }
        // end of line
        System.out.println();
    }
    // add empty line between triangles
    System.out.println();
    // for all lines; number of lines = width
    for (int line = 1; line <= width; line++) {
        // printing padding spaces, number of spaces = with - line number
        int nSpaces = width - line;
        for (int i = 0; i < nSpaces; i++) {
            System.out.print(" ");
        }
        // print numbers from number of current line to 1
        for (int n = line; n >= 1; n--) {
            System.out.print(n);
        }
        // end of line
        System.out.println();
    }
于 2013-02-17T03:51:13.790 に答える
0

scalaで実装しようとしました。嫌なら無視してください..:-)

 class Triangle extends App
{
  val width = Console.readInt()

  if (width < 2 || width > 9)
  {
     throw new RuntimeException()
  }

  var i, j = 1;

  for (i <- 1 to width)
  {
     for (j <- 1 to i)
     {
        print(j)
     }
     print("\n")
  }

  for (i <- 1 to width)
  {
     for (dummy <- 1 to width-i)
     {
        print(" ")
     }
     for (j <- i to 1 by -1)
     {
       print(j)
     }
     print("\n")
  }
}
于 2013-02-21T22:14:59.697 に答える