问题是创建同心和嵌套的正方形,从最大正方形的边开始,给定为 N。就像在纸上画一个正方形内另一个正方形,直到不能再画正方形为止,方法是将边长减 4在每个正方形之后(2 个来自边的 startPos,2 个来自 endPos); N 是开始的正方形的大小。 您必须使用乘法符号 ('*') 绘制边。
上图的比例(看起来更像长方形而不是正方形)可能不准确,但它会让你知道需要做什么.. 下面的代码是我试过的...
public static void main(String[] args)
{
int N=9;
int iLo=0;
int iHi=N-1;
int jLo=0;
int jHi=N-1;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
if(i==0 || (i==N-1) || (j==0) || (j==N-1))
System.out.print('*');
else
{
if(i<=N/2)
{
if((i%2==0) && (i>=iLo) && (i<=iHi) && (j>=jLo) && (j<=jHi))
System.out.print('*');
else
if(i==iLo || i==iHi )
System.out.print('*');
else
System.out.print(' ');
}
else
{
if((i%2==0) && (i>=iLo) && (i<=iHi) && (j>=jLo) && (j<=jHi))
System.out.print('*');
else
System.out.print(' ');
}
}
}
System.out.print(" i-->"+i+" iLo-->"+iLo+" iHi-->"+iHi+" jLo-->"+jLo+" jHi-->"+jHi);
if(i%2>0)
{
if(i<=N/2)
{
jLo=jLo+2;
jHi=jHi-2;
iLo=iLo+1;
iHi=iHi-1;
}
else
{
jLo=jLo-2;
jHi=jHi+2;
iLo=iLo-1;
iHi=iHi+1;
}
}
else
{
}
System.out.println();
}
}
最佳答案
这可以通过使用每次递减 2 (i -= 2) 的 for 循环来解决,或者递归地在基本情况下将单个 * 打印到屏幕上,或者根本不打印。正如其他人发布的那样,除非每个方 block 之间有一些空间,否则您只会有一个实心方 block 。
编辑:看起来您可能不是在另一个正方形之上打印一个正方形,而是在另一个正方形的位置打印。然而,同样的策略适用。
EDIT2:您不需要对 i 和 j 使用嵌套的 for 循环。将每边的长度作为变量 i 的单个 for 循环就足够了。但是,您需要针对重复计算顶点进行调整。
为什么不尝试这样的事情:
// Assumes a cartesian coordinate system, origin at bottom left.
int startingX = 0;
int startingY = 0;
while( length > 0 ){
printHorizontally(length, startingX, startingY);
printVertically(length, startingX, startingY);
startingX += 2;
startingY += 2;
length -= 4;
}
private void printHorizontally(int length, int startingX, int startingY){
// Prints length *s to the screen in a horizontal line starting at the
// given points. Define printVertically similarly.
}
关于java - 在 Java 中使用 for 循环打印嵌套方 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056918/