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

我已经能够完成第一个三角形。但是当我添加我的嵌套循环时,它会将我的第一个三角形与从嵌套循环开发的数字混淆。它还将所有数字放在一条垂直的直线上。我尝试了不同嵌套循环的变体,甚至尝试弄乱 a 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

问题的第二部分有两个方面。

  1. 您需要以相反的顺序生成带有数字的字符串:

    • 您可以通过在另一端添加数字来做到这一点。
    • 您可以通过反转字符串来做到这一点。
  2. 您需要安排左侧有空格。

    • 您可以通过在字符串的左端添加所需数量的空格来做到这一点。
    • 您可以通过使用 System.out.format(...) 和模板来做到这一点,该模板将字段中的字符串与所需的字符数右对齐。(好吧,这有点太晦涩了......)

或者,您可以在字符数组或字符串构建器中构建字符串,而不是使用字符串连接。

“诀窍”是在开始剪切代码之前弄清楚您将使用什么策略。

于 2013-02-17T04:01:35.803 回答
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
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

刚刚尝试在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 回答