模式陷入连续循环

时间:2016-02-06 23:16:30

标签: java

我在使图案正确打印时遇到一些问题。如果我注释掉模式2模式1打印正确。如果我注释掉模式1模式2打印正确。有人可以指出为什么我不能像我想的那样打印这个。它应该以一种方式打印星形图案,然后以相反的方式打印一个System.out.print(" *");命令System.out.println();

   public class Pattern {

      public static void main(String[] args) {
         int a;
         int b;

         //pattern 1
         for (a = 1; a <= 10; a++) {
           for (b = 1; b <= a; b++)

             //pattern2
             for (a = 1; a <= 10; a++){
               for (b = 1; b <= 11 - a; b++)    
                 System.out.print("*");
               System.out.println();
             }
        }
      }
   }

3 个答案:

答案 0 :(得分:2)

始终使用正确的缩进! 如果这样做,您将看到您的代码

for (a = 1; a <= 10; a++) {
    for (b = 1; b <= a; b++)
        for (a = 1; a <= 10; a++){
            for (b = 1; b <= 11 - a; b++)  
                System.out.print("*");
            System.out.println();
        }
}

这不是您想要的,特别是因为您在for循环中覆盖了变量。你想要这个:

    // pattern 1
    for (a = 1; a <= 10; a++) {
        for (b = 1; b <= a; b++)
            System.out.print("*");
        System.out.println();
    }
    // pattern2
    for (a = 1; a <= 10; a++) {
        for (b = 1; b <= 11 - a; b++)
            System.out.print("*");
        System.out.println();
    }

如果您只允许使用一个print语句,则有两种方法可以实现所需的输出。这些方法有点棘手,因为这不是编写for循环的直观方式。

循环1

在此示例中,您将增加a直至到达最后一行。然后你再次减少它(向后计数)。重要提示:a <= 10 && a > 0

    int counter = 1;
    for (a = 1; a <= 10 && a > 0; a += counter) {
        for (b = 1; b <= a; b++) {
            if (b == 10)
                counter = -1;
            System.out.print("*");
        }
        System.out.println();
    }

循环2 在这里,外部循环具有双倍的步数,您可以根据当前所在的行数打印星星数。

    for (a = 1; a <= 20; a++) {
        for (b = 1; b <= -Math.abs(a-10)+10; b++) {

            System.out.print("*");
        }
        System.out.println();
    }

答案 1 :(得分:1)

    //pattern 1
    for (a = 1; a <= 10; a++) {
        for (b = 1; b <= a; b++)


            System.out.print("*");
        System.out.println();
    }
    //pattern2
    for (a = 1; a <= 10; a++) {
        for (b = 1; b <= 10 - a; b++)

            System.out.print("*");
        System.out.println();
    }

答案 2 :(得分:0)

当您注释掉某个模式时,您可以使该代码&#34;隐藏&#34;到编译器。你在说,&#34;撇我!我不重要。&#34;

顺便说一句,Java并不寻找缩进。但是,它会查找参数下的语句数(当没有括号时)。您可以将参数嵌套在另一个参数中,如下面的代码所示:

for (a = 1; a <= 10; a++)
    for (b = 1; b <= a; b++)
         for (a = 1; a <= 10; a++)
             for (b = 1; b <= 11 - a; b++)  

请注意,上面的代码不是您的模式的答案。这是为了向您解释如何使用不带括号的语句来帮助您解决问题你自己 :)。在使用模式的情况下,我建议始终使用括号来嵌套语句(特别是因为您需要在for循环中使用print语句)。请注意,在上面的代码中,每个for语句下面只有一个语句。这就是为什么没有括号就行的原因。如果你添加这样的打印语句:

for (a = 1; a <= 10; a++)
    for (b = 1; b <= a; b++)
         System.out.print("*")//the next line will not be nested inside the above for loops
         for (a = 1; a <= 10; a++)
             for (b = 1; b <= 11 - a; b++)  

最后两个for循环不会嵌套在第二个for循环中,因为编译器只允许在没有括号的for循环下面有一个语句。如您所见,不使用括号可能会让人感到困惑。

使用您的特定代码,您的问题在于它是如何嵌套的(使用括号):

//对于循环#1 for (a = 1; a <= 10; a++)

//对于循环#2 {for (b = 1; b <= a; b++) //请注意,这里没有封闭的括号

//对于循环#3 for (a = 1; a <= 10; a++){

//对于循环#4 for (b = 1; b <= 11 - a; b++) //请注意,这里没有封闭的括号

 System.out.print("*");
 System.out.println();} } } }` //source of your problem

将闭合的括号(} )放在该位置(我写问题的来源),您正在嵌套循环#4,循环#3和循环#2 循环#1。这就是为什么当您注释掉代码时模式会发生变化的原因。

考虑移动括号。请注意,如果需要将模式1和模式2分开,则还需要为每个模式创建打印语句。

通常使用模式问题,您需要将for语句视为行和列。提示,很多模式问题都要求你将外部for循环视为一行,将内部for循环视为一列。

示例:

for(int a = 0; a<=3; a++)//rows
{
      for(int b = 0; b<=a; b++)//columns
      {
           System.out.print("*");//use print() so that the asterisks print on the same line
      }

      System.out.println();//This will create your rows(separates each iteration with a new line)
}

输出:

*
**
***
****

这样的事情应该让你开始:

public static void main( String[] args )
{

    int a;
    int b;

    //pattern 1
    for (a = 1; a <= 10; a++)
    {
        for (b = 1; b <= a; b++)
        {
            System.out.print("*");//this creates each column

        }
        System.out.println();/*
                              * this marks the end of a row and brings the
                              * asterisks down to the next line
                              */
    }

    //pattern2
    for (a = 1; a <= 10; a++)
    {
        for (b = 1; b <= 11 - a; b++)
        {
            System.out.print("*");//this creates each column

        }
        System.out.println();/*
                              * this marks the end of a row and brings the
                              * asterisks down to the next line
                              */
    }
}

另外,请参阅Java样式指南以清理代码:)。 http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

希望这有帮助!