2011-10-27 32 views
3

嗨,我做我的课程和我一直在考虑的任务是使算法的方形这是使用5×5“*”,但必须结合填写“”。所以这样的:Outputing方在Java安慰

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

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

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

这里是我的代码:

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; 
    } 
} 

PS对不起,在编码那么糟糕:d和任何帮助,将不胜感激感谢加雷思

+2

您目前没有可以打印“。”的代码 – harold

+0

输出的结果是什么样的? – blank

+0

强烈建议您针对您的问题使用更具描述性的标题,例如“输出一个正方形” –

回答

3

您是否已经获得了打印5x5正方形星号的程序?

我强烈建议得到那工作第一。之后,您只需稍作修改就可以在两者之间打印点。

对于这一点,而不是总是打印一个星号,你需要一个条件。

伪代码:

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

我要把它留给你找出如何转化为真正的代码这一点。祝你好运!

编辑,提示如何确定,如果你目前所在的边缘:

  1. 您跟踪当前行和当前列的(为了 打印广场正好5x5的字符)。
  2. 边缘由第一行和最后一行以及第一列和最后一列组成。
  3. 鉴于提示1提示2,你现在可以决定当你在边缘,当你不?您需要进行变量比较,所以如果您不熟悉如何比较变量,请阅读您的教科书。

希望有所帮助。没有提供确切的答案,我可以说没有更多。

最后,想想你的解决方案之前编码它。立即跳入编码可能是一个障碍,特别是当你是初学者时,不太熟悉这门语言,所以你会陷入语言语法中。在编写实际代码之前,可以精心组织您的程序流程,绘制图片,也许编写伪代码。我发现这样做可以帮助我更容易地编写代码并减少出现的错误数量。

+0

非常感谢我只是不明白如何或在哪里做它,但我想这意味着我必须击中书籍 – gareth

+0

和是的我有一个广场与***** 5x5 – gareth

+0

好吧,我更新了我的答案,提示。希望这可以帮助。 – Anson

7

指导,而不是一个答案,因为它的课程...

这听起来像你需要一个if声明来决定是否打印*.。当您在第一行或最后一行,或第一列或最后一列时,应打印*

你会发现流量控制更直观的使用嵌套循环for创建一个正方形,例如

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

由于教学原因,行和列可能应该被启发,因为字符在主控台上打印行主要。因为它是一个正方形,所以无论如何它都会做任何改变。 – vidstige

+1

@vedstige:好点...我很习惯写屏幕内存col-then-row是第二性质:-)在示例中更改。 –

0

当任一循环变量都处于其限制值(上限和下限)时,您必须打印*,而在其他情况下则必须打印。使用if语句来控制这个流程。欢呼:)

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是负的)。您可以使用该原则将条件转换为位掩码。你也可以用无符号的移位和否定来完成它,但是你也可以用更短的方式写出它。其次,我用了​​3210和a^0 = a
因此,当所有条件成立时,'*''*'^'.'进行着色,给出'.',否则'*'用0进行着色,给出'*'

当然,这只是为了好玩。