在java中输出一个方块到控制台

时间:2011-10-27 17:04:02

标签: java algorithm

嗨,我正在做我的课程,而且我被赋予的任务是使用“*”制作一个5x5的正方形算法,但必须用“。”填写。像这样:

*****
*...*
*...*
*...*
*****

我使用过这段代码,我知道它可能非常混乱,因为我是这个东西的绝对初学者。我似乎无法得到“。”在我目前有:

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

这是我的代码:

public static void main( String args[] )
{
    System.out.print ("#size of square");
    int stars=BIO.getInt();
    int j=1;
    while(j <= stars)
    {
        int starsNumber=1;
        while (starsNumber<= stars)
        {
            int i = 1;                        // Display trunk
            starsNumber=starsNumber+1;
            System.out.print('*');
        }
        System.out.println();

        j= j +1;
    }
}

p.s抱歉编码非常糟糕:D和任何帮助都将非常感谢Gareth

4 个答案:

答案 0 :(得分:8)

指导而非答案,因为它是课程作业......

听起来您需要if语句来决定是打印*还是.。当您在第一行或最后一行,或第一列或最后一列时,应打印*

您会发现使用嵌套for循环创建正方形时,流控制更直观,例如

for (int row=0; row<stars; row++)
{
    for (int col=0; col<stars; col++)
    {
        // Do your output here
    }
}

答案 1 :(得分:4)

你有没有打印出5x5平方满星号的程序?

我强烈建议先让它工作。之后,您只需要进行一些小修改即可在两者之间打印点。

为此,您需要一个条件。

,而不是始终打印星号

伪代码:

if(I'm currently on the edge)
  Print an asterisk
else
  Print a dot

我会留给你弄清楚如何将其翻译成真实的代码。祝你好运!

编辑,提示如何确定您目前是否处于优势地位:

  1. 您正在跟踪当前行和当前列(按顺序 打印正方形的5x5字符)。
  2. 边缘由第一行和最后一行以及第一列和最后一列组成。
  3. 鉴于提示1和提示2,您现在可以确定何时处于边缘以及何时不处理?您需要进行变量比较,如果您不熟悉如何比较变量,请阅读您的教科书。
  4. 希望有所帮助。如果不泄露确切的答案,我真的可以说更多。

    最后,在编码之前考虑一下你的解决方案。立即跳入编码可能是一个障碍,特别是当你是一个初学者并且不太熟悉语言时,你会陷入语言语法的困境。在编写实际代码之前,精心整理程序流程,绘制图片,并写入伪代码。我发现这样做有助于我更轻松地编写代码并减少出现的错误数量。

答案 2 :(得分:0)

当你的任何一个循环变量处于其极限值(上下两个)时,你必须打印一个*,而在其他情况下你必须打印。使用if语句来控制此流。干杯:)

答案 3 :(得分:0)

所有这些“使用if声明”,让我们现在以其他方式做。当然这实际上并没有用,我只是想挑战你必须使用控制流的想法,也许人们绊倒它可能会从中学到一些东西......

首先,这是我提出的代码(它有效)

    for (int row = 0; row < stars; row++) {
        for (int col = 0; col < stars; col++) {
            System.out.print((char)((
                    (-col) >> 31 & // encodes the condition: col > 0
                    (-row) >> 31 &
                    (col - (stars - 1)) >> 31 &
                    (row - (stars - 1)) >> 31 & ('*' ^ '.')) ^ '*'));
        }
        System.out.println();
    }

我用来避免控制流的基本原理是当负int被右移(带符号移位)时,signbit被复制到左侧“移入”的位中。结果是x >> 31(其中x是一个int)只有两个可能的结果,0(如果x是非负的)和-1(如果x是负的)。您可以使用该原则将条件转换为位掩码。你也可以用无符号移位和否定来做,但你也可以用更短的方式写它 其次,我使用了(a ^ b) ^ a = ba ^ 0 = a 因此,当所有条件成立时,'*''*' ^ '.'相对应,给出'.',否则'*'与零相关,给出'*'

当然,这只是为了好玩。