我目前正在尝试显示一个填充的星号正方形和一个空心的星号:

********** **********
********** *        *
********** *        *
********** *        *
********** **********


相反,我得到以下输出:

**********
**********
**********
**********
**********
**********
*        *
*        *
*        *
**********


我不太确定如何使其并排而不是上下移动。我是否必须将空心嵌套循环放入填充循环内,还是必须做其他事情?这是我的代码:

public class doubleNestedLoops {
    public static void main(String [] args)
    {
        //Filled Square
        for(int i = 1; i <= 5; i++)
        {
            for(int j=1; j<= 10; j++)
            {
                System.out.print("*");
            }
            System.out.println();
        }

        //Hollow Square
        for(int j=1; j<=5; j++)
          {
            for(int i=1; i<=10; i++)
            {
              if(j ==1 || j==5 || i==1 || i==10)
              {
                System.out.print("*");
              }
              else
              {
                   System.out.print(" ");
              }
            }
             System.out.println();
          }
    }
}


对不起,格式化不好

最佳答案

约翰·马丁内斯(John Martinez)的回答很好,但是效率不高。我将逐步将您的代码放在经过修改的代码下面:

public class Main {
    public static void main(String[] args) {
        //Both Squares
        StringBuilder filledLine = new StringBuilder(10);
        StringBuilder hollowLine = new StringBuilder(10);
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 10; j++) {
                filledLine.append("*");
                if (i == 1 || i == 5 || j == 1 || j == 10) {
                    hollowLine.append("*");
                } else {
                    hollowLine.append(" ");
                }
            }
            System.out.println(filledLine + " " + hollowLine);
            filledLine.delete(0, filledLine.length());
            hollowLine.delete(0, hollowLine.length());
        }
    }

}


步骤1:将您的两个循环转换为一个循环。这是因为一旦创建新行后就无法在同一行上打印。

步骤2:因为我们将在循环中使用字符串,所以使用StringBuffer效率更高,因此我们不会不断创建新字符串

步骤3:将逻辑的所有输出写入缓冲区,而不是控制台。

步骤4:在我们填充缓冲区时,一次只打印一行。

步骤5:获利!

08-05 20:00