2016-06-21 181 views
-2

目前正在处理一些额外的问题集,似乎被这个问题困住了。我需要做下面的输出:需要在java中循环的帮助

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

我已经得到了十字架上下来,但我有,中间行的问题,希望有人能帮助我找到答案。继承人到目前为止我的代码(输入设定为5):

public static void drawPlusVersion3(int input){ 
     if (input % 2 != 0) { 
for(int c = 0; c < input; c++) { 
     for(int r = 0; r < input; r++) { 
      if((c == input/2) || (r == input/2)) 
       System.out.print("*"); 
      if (c == r){ 
       System.out.print("*"); 
       } 
      else 
       System.out.print(" "); 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 
} 
    } 

电流输出:

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

在此先感谢!

+0

你知道为什么* *你的程序打印它所打印的? – immibis

+0

您是否已经完成了IDE调试器中的代码?这是开始的地方,你应该在发布之前这样做,以便更好地了解哪些行为出乎意料。如果您一次只使用一个调试器,您很可能会发现错误。有了这种类型的问题,如果您在问这里之前应用了良好的调试技巧,那么您将为自己和我们其他人节省大量时间。 –

+0

@immibis我知道代码的作用,但我不知道为什么这些2星粘在一起,并破坏了模式 – Ronald

回答

1

如何:

for (int i = 0; i < input; i++) { 
    for (int j = 0; j < input; j++) { 
     if (j == input/2 || i == input/2 || i + j == input - 1) { 
      System.out.print("* "); 
     } else { 
      System.out.print(" "); 
     } 
    } 
    System.out.println(); 
} 
+0

这个工作原理但是我不认为你需要'System'中'*'之后的空格。 out.print(“*”);' – Ronald

+0

@RonLevitzky这取决于你。你的示例输出有空格,所以我包含它。 – shmosel

2

你可以试试:

public static void drawPlusVersion3(int input){ 
     if (input % 2 != 0) { 
for(int c = 0; c < input; c++) { 
     for(int r = input - 1; r >= 0; r--) { 
      if((c == input/2) || (r == input/2) || c == r) 
       System.out.print("*"); 
      else 
       System.out.print(" "); 
       System.out.print(" "); 
     } 
     System.out.println(); 
    } 
} 
    } 
+0

这给出了相同的输出只是在相反的方向和2星由于某种原因仍然互相接触 – Ronald

+1

我固定的代码,你可以再次检查@RonLevitzky – ThiepLV

+0

这是这么简单的呃。你介意解释为什么将'c == r'移到'if'语句中改变了结果?仍然有点困惑。 – Ronald