2014-09-28 110 views
2

如何打印?向后嵌套For循环在Java中?

!!!!!!!!!!!!!!!!!!!!!! 
\\!!!!!!!!!!!!!!!!!!// 
\\\\!!!!!!!!!!!!!!//// 
\\\\\\!!!!!!!!!!////// 
\\\\\\\\!!!!!!//////// 
\\\\\\\\\\!!////////// 

我:

public class SlashFigure { 
    public static void main(String[] args){ 
        first(); 
    } 
     
     

        public static void first() { 
            for ( int i= 1; i<=6; i++) { 
                for (int l = 0; l <= 2 * i -2; l++) { 
                    System.out.print("\\"); 
                } 
                        for (int e = 22; e >= -2*i + 26; e-=1) { 
                            System.out.print("!"); 
                        } 
                                for (int r = 0; r <= 2 * i -2; r++) { 
                                    System.out.print("/"); 
                                } 
         System.out.println(); 
      } 
     } 
    } 

,它的印刷本:

\/ 
\\\!/// 
\\\\\!!!///// 
\\\\\\\!!!!!/////// 
\\\\\\\\\!!!!!!!///////// 
\\\\\\\\\\\!!!!!!!!!/////////// 
+0

参见http://stackoverflow.com/questions/580269/reverse-iteration-through-arraylist-gives-indexoutofboundsexception/1063588#1063588 – 2014-09-28 03:55:23

回答

0

你有多个嵌套的循环,但只需要一个开销循环一行接近线。

for(int i = 0; i < 6; i++){ 
    for(int k = 0; k < i*2; k++) System.out.print("\\"); 
    for(int j = i*2; j < 22 - (i*2); j++) System.out.print("!"); 
    for(int l = 0; l < i*2; l++) System.out.print("/"); 
    System.out.println(); 
} 
+0

和更有效地与最初的'for(int i = 0'为'for( int i = 0,j = 0,k = 0)',然后对'\\'和'//'使用'for(k = 0)'两次,因为它们是相同的组。 – 2014-09-28 04:33:01

1

你已经写了比你需要更多的代码。您显示的线条模式仅为line * 2 * \ + 22 - line * 4 * ! + line * 2 * /,正好有6行,但它总是包含2个字符,因此我们可以将所有这些都除以2,并观察\\//遵循相同的规则:

for(int i=0, j=0, k=0; i<6; i++) { 
    for(j=0; j<i; j++) { System.out.print("\\\\"); } 
    for(k=0; k<(11-2*i); k++) { System.out.print("!!"); } 
    for(j=0; j<i; j++) { System.out.print("//"); } 
    System.out.println(); 
} 

完成。