我目前正在尝试显示一个填充的星号正方形和一个空心的星号:
********** **********
********** * *
********** * *
********** * *
********** **********
相反,我得到以下输出:
**********
**********
**********
**********
**********
**********
* *
* *
* *
**********
我不太确定如何使其并排而不是上下移动。我是否必须将空心嵌套循环放入填充循环内,还是必须做其他事情?这是我的代码:
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:获利!