Java 如何使用星号打印沙漏?
对于家庭作业,我尝试构建一个程序,使用星号和空格将沙漏形状打印到屏幕上。我已经编写了下面的程序,但是它的输出看起来不像沙漏。有人能帮我理解为什么我的程序不能产生预期的输出吗Java 如何使用星号打印沙漏?,java,Java,对于家庭作业,我尝试构建一个程序,使用星号和空格将沙漏形状打印到屏幕上。我已经编写了下面的程序,但是它的输出看起来不像沙漏。有人能帮我理解为什么我的程序不能产生预期的输出吗 public class hourglass { public static void main(String[] args) { int x = Integer.parseInt(args[0]); int k = 2 * x - 1; int c = k;
public class hourglass {
public static void main(String[] args) {
int x = Integer.parseInt(args[0]);
int k = 2 * x - 1;
int c = k;
for (int j = x; j > 0; j--) {
for (int f = j; f <= k; f++) {
System.out.print("*");
}
for (int o = 1; o <= c; o++) {
if (k % 2 == 0) System.out.print(" ");
else System.out.print(" ");
}
System.out.print("\n");
}
}
}
公共类沙漏{
公共静态void main(字符串[]args){
intx=Integer.parseInt(args[0]);
int k=2*x-1;
int c=k;
对于(int j=x;j>0;j--){
对于(int f=j;f如果您不在代码中思考(新手会做什么?),您可以尝试从写一篇散文(-ish)描述您的程序将如何执行其任务开始,然后编写与散文相匹配的代码。例如,您可以从以下内容开始:
给定一个表示沙漏形状宽度的输入x
,将沙漏打印到屏幕上,作为一系列包含星号和空格的行。每行上的星号数将从x
开始,每行倒数两个,直到包含少于两个星号的行,然后每行倒数两个直到它再次到达x
。每行将打印适当数量的前导空格,使该行的星号相对于其他行居中(假设空格与星号的宽度相同)
您甚至可以将其作为注释放入源代码中。事实上,它可以帮助您将其分解为几个较小的注释,这样您就可以按照每个逻辑思想编写专门与该思想对应的代码。如果您这样做,那么它不仅可以帮助您组织代码,而且最终会生成一个文档化良好的程序不需要任何额外的努力
如果你将我的散文与你的程序进行比较,你会发现两者的相同点和不同点。你的程序会进行某种倒计时,在每一步打印零个或多个空格字符、一些星号,然后换行结束。这些基本上都是正确的操作,但细节是错误的。错误和奇怪的已经够多了足够的错误,事实上,我倾向于怀疑这个程序是从外部来源而不是精心设计的从头开始的。我建议你把注意力集中在自己编写程序上。事实上,首先考虑抛出<代码>主代码()/<代码>中的所有内容,除了<代码> int x=整数。(args[0]);
您需要选择一个更好的标题。您当前的标题没有多大帮助。您将有更好的机会避免被吃掉(并获得有用的答案)如果您有所了解。欢迎使用Stack Overflow。请编辑您的标题并选择一个更好的标题,该标题实际上描述了您的问题。另外,请使用so you know@Josef,格式不好的代码很难阅读。虽然我感谢您添加缺少的右大括号,但在这个过程中,您并没有帮助自己重读我为你做的垫子。我知道这不是CodeReview.SE,而是你自己(和我们)做的帮个忙,使用有意义的变量名。x
,k
,c
,j
,o
?您可以使用topWidth
,baseWidth
,height
。对于for循环,您可以重用一个增量变量,比如i
,或者将其称为width
。就这样告诉我一些可以使编写/阅读代码更容易的想法。
public class hourglass
{
public static void main(String[] args)
{
int valueIn = Integer.parseInt(args[0]);
int maxVALUE = 2*valueIn ;
for( int i = 0 ; (valueIn - 1) > i; i--)
{for( int j =1 ; j < maxVALUE; i++)
{
System.out.print("*");}
for (int o = 1; o < maxVALUE; o++) {
if (maxVALUE % 2 == 0) System.out.print(" ");
else System.out.print(" ");
}
System.out.print("\n");
}
}
}
public class mathrandom
{
public static void main ( String [] args)
{
int valueIn = Integer.parseInt(args[0]);
for ( int i = valueIn; 1 <= i; i--){
for ( int k = i ; k < 2*valueIn -1; k++)
{System.out.print(" ");}
{for ( int j = 1; j <= (i*2)-1; j++)
{
System.out. print("*");
}
System.out.println();
}
}
}}