如何在嵌套循环中反转一串数字

时间:2013-02-17 03:26:45

标签: java

这是一个家庭作业问题所以我想要帮助,而不是答案。

我正在尝试根据用户输入的数字从数字中创建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);

        }

    }

}

同样,我正在寻求帮助/理解而不仅仅是答案。

6 个答案:

答案 0 :(得分:1)

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

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

    • 您可以通过在另一端添加数字来实现此目的。
    • 您可以通过反转字符串来完成此操作。
  2. 您需要安排左侧有空格。

    • 您可以通过在字符串的左端添加所需数量的空格来完成此操作。
    • 您可以使用System.out.format(...)和模板来执行此操作,该模板将字段中的字符串与所需的字符数对齐。 (好吧,这有点太模糊......)
  3. 或者,您可以在字符数组或字符串构建器中构建字符串,而不是使用字符串连接。

    “技巧”是在开始削减代码之前弄清楚你要使用什么策略。

答案 1 :(得分: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));
        }

我离开倒车部分让你做:)

答案 2 :(得分:0)

你可以在第一次循环之后添加另一个循环,如

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

    }

试试吧。尚未测试

答案 3 :(得分: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();
    }

答案 4 :(得分: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();
    }
}

答案 5 :(得分: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")
  }
}