2013-02-17 108 views
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); 

     } 

    } 

} 

我再次寻求帮助/理解,而不仅仅是一个答案。

+0

请悬停在'家庭作业'标签,并阅读它说什么。 – Xymostech 2013-02-17 03:30:06

+0

你需要使用嵌套循环进行赋值吗?你可以用两个循环来解决这个问题,而不用嵌套它们,或者用一些更复杂的字符串操作来解决。 – twain249 2013-02-17 03:32:41

+0

@Xymostech,不能使用学校。建议? – 2013-02-17 03:32:56

回答

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(); 
    } 
+0

请忽略我最后的评论,我没有看到你在第二个for循环中将行设置回1。 – SkyVar 2013-02-17 04:09:42

+0

这是Java规则:in for(int line = 1; line <= width; line ++){..} var line仅在block {}内可见。它与C++不同 – 2013-02-17 04:15:15

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)); 
     } 

我离开翻转部为你做:)

+0

你有什么机会可以向我展示这个例子吗? – SkyVar 2013-02-17 03:39:36

0

你能只是你喜欢

第一循环之后添加另一个循环
String r = ""; 
String space = ""; 
    for (int i = width; i >= 1; i--) 
    { 
     r = r + i; 
     System.out.println(r); 

    } 

试试吧。尚未测试

1

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

  1. 您需要以相反的顺序号码生成字符串:

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

    • 您可以通过在字符串的左端添加所需数量的空格来实现此目的。
    • 您可以通过使用System.out.format(...)来完成此操作,该模板将字段中的字符串与所需数量的字符对齐。 (好吧,这是一个有点太晦涩......)

或者,你可以建立一个字符数组或字符串生成的字符串,而不是使用字符串连接。

“诀窍”是在开始切割代码之前找出您要使用的策略。

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(); 
    } 
} 
0

只是试图在斯卡拉实施。忽略,如果你不喜欢它.. :-)

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") 
    } 
}