嗨,我正在做我的课程,而且我被赋予的任务是使用“*”制作一个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
答案 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
我会留给你弄清楚如何将其翻译成真实的代码。祝你好运!
编辑,提示如何确定您目前是否处于优势地位:
希望有所帮助。如果不泄露确切的答案,我真的可以说更多。
最后,在编码之前考虑一下你的解决方案。立即跳入编码可能是一个障碍,特别是当你是一个初学者并且不太熟悉语言时,你会陷入语言语法的困境。在编写实际代码之前,精心整理程序流程,绘制图片,并写入伪代码。我发现这样做有助于我更轻松地编写代码并减少出现的错误数量。
答案 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 = b
和a ^ 0 = a
因此,当所有条件成立时,'*'
与'*' ^ '.'
相对应,给出'.'
,否则'*'
与零相关,给出'*'
。
当然,这只是为了好玩。