Java - 使用嵌套循环打印空方块

时间:2012-03-28 17:47:52

标签: java

我正在打印一个准空方块,看起来像下面的例子(10个星号,10个星号):

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

我的代码无法动态生成由用户输入指定的行数和列数的正方形(它适用于10行和10列,但只要我将数字更改为20,星号的数量就会生成不要改变。以下是我的代码:

String STAR = "*";
String star1 = "**********";
int MAX = 10;
for (int row = 0; row <= MAX; row += 1 ) {
    for (int col = 0; col <= MAX ; col += 10) {
        if (row == 0 && col == 0)
            System.out.println(star1);
        if (row >= 1 && row <= 4)
            System.out.println(STAR + "        " + STAR);
        if (row == 10 && col == 10)
            System.out.println(star1);
    }
}

欢迎任何关于代码活力的帮助/建议。

16 个答案:

答案 0 :(得分:2)

String star = "*";
String space = " ";

int MAX = xxx;

for (int row = 0; row < MAX; row++) {
  for (int col = 0; col < MAX; col++) {
    if (row == 0 || row == MAX - 1) {
      System.out.println(star);
    } else if (col == 0 || col == MAX - 1) {
      System.out.println(star);
    } else {
      System.out.println(space);
    }
  }
}

答案 1 :(得分:0)

看看你的嵌套循环:

for (int col = 0; col <= MAX ; col += 10) {

所以当col为10时,你真的只是迭代一次......你可能根本就没有嵌套循环。

此外,star1和带空格的字符串文字都有固定数量的字符,与列数明显相关。

我认为这是作业,所以我不会再提供任何暗示,但希望这会让你想到正确的思路......

答案 2 :(得分:0)

您应该通过10变量更改两个for循环中MAX的3次出现,因此当用户定义其他大小时,您的for循环将会占用他的输入而不是10值。

答案 3 :(得分:0)

另外,请看一下你在if (row == 10 && col == 10)所说的最后一个if语句,并考虑一下。一旦达到10行和10列,您只需要打印star1的最终水平线,而不管MAX的设置是什么。

答案 4 :(得分:0)

如上所述,嵌套for循环是不必要的,如果你计划将来创建更大的矩形,效率可能会很低(不是说你必须但是如果可以的话,试着远离嵌套的for循环) 。相反,只需在循环开始之前和退出之后打印star1。循环体应该足够简单。希望这会有所帮助。

答案 5 :(得分:0)

class Square 
{

    public static void main(String[] args) 
    {
        String tenStars="**********";
        String oneStar="*";
        int count=0;

        System.out.println(tenStars);
        count++;
        while(count<=8)
        {
            System.out.println(oneStar+"     "+oneStar);
            count++;
        }
        System.out.print(tenStars);

    }
}

答案 6 :(得分:0)

这应该有效

    public static void hallowSquare(int side)
{
    int rowPos, size = side;

    while (side > 0)
    {

        rowPos = size;

        while (rowPos > 0)
        {

            if (size == side || side == 1 || rowPos == 1 || rowPos == size)
                System.out.print("*");

            else
                System.out.print(" ");
            rowPos--;
        }
        System.out.println();
        side--;

    }       

}

答案 7 :(得分:0)

这是另一个解决方案,一个更通用的解决方案。它允许您创建一个高度为“h”且宽度为“w”的空心矩形

     private static void hallowSquare(int h, int w)
{
    for(int i=1; i<=h; i++)
    {
        for(int j=1; j<=w; j++)
        {
            if (j==1|| j==w || i==1 || i==h )
            System.out.print("X");
            else
                System.out.print(" ");
        }
        System.out.println();
    }

}

答案 8 :(得分:0)

你可以使用一个用户输入来使用这样的东西......这是有效的

public static void drawSquare(int size)
{
       for(int i=1; i<size ;i++)
       System.out.print("*");
       System.out.println("");
       for(int i=0; i<50 ;i++)
       {
              System.out.print("*");
              for(int j =0; j<size-3; j++)
                    System.out.print(" ");
              System.out.println("*");
       }

       for(int i=1; i<size ;i++)
              System.out.print("*");
}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    drawSquare(50);
}

你应该创建一个类,把它放在你的类中并运行它...我希望这会对你有帮助....

答案 9 :(得分:0)

class Star8
{
    public static void main(String[] args) 
    {
        for(int i=1;i<=5;i++)
        {
            for(int j=1;j<=5;j++)
            {
                if(i==2||i==3||i==4 )
                {
                    System.out.print("*    *");
                    break;
                }
                else
                {
                    System.out.print("*");
                }
            }    
            System.out.println();
         }
     }
 }

答案 10 :(得分:0)

希望这会有所帮助,简化你的思维伴侣。考虑轴x和y,并按照该逻辑工作。在ur上创建一个嵌套循环,用于循环传递线,在每种情况下循环数 方块的大小和打印空格,嵌套循环后打印“*”。

> for (int b=0;b<ans*2-3;b++)

此嵌套循环的最大值为b,因为:

请记住,在你打印时,每个“*”都与一个空格隔开,并记住你只计算第一列和最后一列之间的空间。意思是所有空间 在x = 0和x = squareize之间,因此max b应该是这两个coords之间的空间。 其中:squareize * 2 / 2用于添加的空格 / -3 / * -3因为你省略了第一个坐标(x = 0),最后一个坐标(x =平方尺),和从前一个循环中添加了1个空格。

import java.util.Scanner;
public class AsteriksSquare {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input= new Scanner(System.in);
        int ans;
        System.out.print("Enter the size of the side of the square: ");
        ans=input.nextInt();
        String ast="*";
        if (ans>0 && ans<21){

            for(int i=0;i<=ans-1;i++){
                System.out.print("* ");


        }
            System.out.println("");
            for(int i=1;i<=ans-2;i++){
                System.out.print("*");
                for (int b=0;b<ans*2-3;b++){
                    System.out.print(" ");

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


        }
            for(int i=1;i<=ans;i++){
                System.out.print("* ");


        }

}
}
}

答案 11 :(得分:0)

class  square1
  {
     public static void main(String[] args) 
      {
       String star = "*";
       String space = " ";
       int MAX = 5;
      for (int row = 0; row < MAX; row++) 
        {
          for (int col = 0; col < MAX; col++) 
            {
             if (row == 0 || row == MAX - 1) 
              {
                System.out.print(star);
              } else if (col == 0 || col == MAX - 1)
              {
                System.out.print(star);
              } else {
               System.out.print(space);
              }
          }
        System.out.println();
        }
     }
   }

答案 12 :(得分:0)

这段代码可以解决问题。

package javaPackage;

public class Square {   

    public static void main(String [] args)
    {
        for (int i=0;i<=10;i++)
        {
            for (int j=0;j<=10;j++)
            {
                if(i==0||i==10){
                    System.out.print("x");
                }
                else if(j==0||j==10){
                    System.out.print("x");
                }
                else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }
}

如果解释器看到你在第一行和最后一行(i = 0且i = 10),它将用x填充行。否则,它只会在行的开头和结尾打印一个x。

答案 13 :(得分:0)

您可以使用以下两种方法。

1)一行代码很少。

for (int i = 0; i <= 9; i++) {
            if (i == 0 || i == 9) {
                System.out.println("* * * *");
            } else {
                System.out.println("*     *");
            }
        }

OR

2)借助两个for循环

for (int i = 0; i <= 9; i++) {
                for (int j = 0; j <= 9; j++) {
                    if (i == 0 || i == 9) {
                        System.out.print("*");
                    } else {
                        if (j == 0 || j == 9) {
                            System.out.print("*");
                        } else {
                            System.out.print(" ");
                        }
                    }
                }
                System.out.println();
            }

谢谢, Stuti

答案 14 :(得分:0)

import java.util.Scanner;
class Star
{
    public static void main(String...args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter the row : ");
        int row=sc.nextInt();
        System.out.print("Enter the column : ");
        int column=sc.nextInt();
        for(int i=1;i<=column;i++)
        {
            System.out.print("*");
        }
        for(int i=row-2;i>=1;i--)
        {
            System.out.println();
            System.out.print("*");
            for(int k=1;k<=column-2;k++)
            {
                if(i<1)
            {
                break;
            }
                System.out.print(" ");

            }
            System.out.print("*");
        }
        System.out.println();
        for(int i=1;i<=column;i++)
        {
            System.out.print("*");
        }
    }
}

答案 15 :(得分:-1)

我希望下面的代码可以提供帮助,使用非常简单的编码并获得所需的结果。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notify);
        editspeak = (EditText) findViewById(R.id.editspeak);
       btspeak=(Button)findViewById(R.id.bt);


      // speakout();
      //  mydb = new DBhandler(this);
        SharedPreferences preferences=getSharedPreferences(PREFS,0);
        String name=preferences.getString("NAME",null);
        editspeak.setText(name);

        t1=new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if(status != TextToSpeech.ERROR) {
                    t1.setLanguage(Locale.US);
                }
            }
        });

        btspeak.setOnClickListener(new View.OnClickListener() {
            @Override
           public void onClick(View v) {
        String text = editspeak.getText().toString();
        t1.speak(text, TextToSpeech.QUEUE_FLUSH, null);
               // bt.setPressed(false);
               // bt.invalidate();

            }
        });
       btspeak.performClick();

结果是:
The following result is for the height: 6 and width:15