java - 在 Java 中使用 for 循环打印嵌套方 block

标签 java for-loop

The pattern of stars that need to be printed问题是创建同心和嵌套的正方形,从最大正方形的边开始,给定为 N。就像在纸上画一个正方形内另一个正方形,直到不能再画正方形为止,方法是将边长减 4在每个正方形之后(2 个来自边的 startPos,2 个来自 endPos); N 是开始的正方形的大小。 您必须使用乘法符号 ('*') 绘制边。

上图的比例(看起来更像长方形而不是正方形)可能不准确,但它会让你知道需要做什么.. 下面的代码是我试过的... This the exact pattern that needs to be printed..

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/

相关文章:

java - 为什么字符串常量之一不会在 toString 方法中格式化?

javascript - 在 for 循环中路由不起作用

c++ - 如何删除字符串中的字符?

C++ For 循环在过程中被跳过。如何修复它?

Scala for/yield 语法

java - Spring Boot + React JS + Firebase 实时数据库

java - 如何在 java 的方法中使用泛型 T?

java - 执行一段字节码

java - 从 ListView 中获取选定的行号

c++ - 在c++中基于范围的for循环中使用引用作为控制变量