2015-09-24 34 views
0

我想创建一个钻石形状(由星号组成),但是我似乎无法得到右下腿的右下角?为什么我的代码不正确?在此先感谢初学Java控制循环不产生期望的结果

import java.util.Scanner; 
public class Diamond 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Enter the size of the diamond and press enter:");  
     Scanner kb = new Scanner(System.in); 
     int N = kb.nextInt(); 

     for (int c0 = 1; c0 <= N; c0++)  // establishes the number of lines in the diamond     
     { 

      for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk 
      System.out.print("*"); 

      for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line 
      System.out.print("*"); 
      System.out.println(); 

     } 

     for (int c0 = 1; c0 <= N; c0++) // establishes the number of lines in the diamond     
     { 

      for (int c1 = N; c1 >= N+2-c0; c1--) System.out.print(" "); // establishes the number of spaces before each asterisk 
      System.out.print("*"); 

      for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line 
      System.out.print("*"); 
      System.out.println(); 

     } 

    } 
} 

回答

0

如果你提取一个方法,事情是更多的可读性。但首先,

for (int c2 = N*2; c2 >= c0+2; c2--) System.out.print(" "); 

应该像

for (int c2 = 0; c2 < (N-c0)*2; c2++) System.out.print(" "); 

类似

static String getSpaces(int n) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < n; i++) { 
     sb.append(' '); 
    } 
    return sb.toString(); 
} 

然后你可以调用像

for (int c0 = 0; c0 < N; c0++) { 
    System.out.print(getSpaces(N - c0)); 
    System.out.print("*"); 
    System.out.print(getSpaces(c0 * 2)); 
    System.out.print("*"); 
    System.out.println(); 
} 
for (int c0 = 1; c0 <= N; c0++) { 
    System.out.print(getSpaces(c0)); 
    System.out.print("*"); 
    System.out.print(getSpaces((N - c0) * 2)); 
    System.out.print("*"); 
    System.out.println(); 
} 
+0

这个做了TRIC ķ。我还没有学过那些其他的东西,但是你对我现有的代码的修复是有用的 – skellyboy

0

我调整了一下你的程序...你需要做一些更多的工作来摆脱一些额外的星号。至少它会给你一些更多的想法:

import java.util.Scanner; 
public class Diamond 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Enter the size of the diamond and press enter:");  
     Scanner kb = new Scanner(System.in); 
     int N = kb.nextInt(); 

     for (int c0 = 1; c0 <= N; c0++)  // establishes the number of lines in the diamond     
     { 

      for (int c1 = 0; c1 <= N-1-c0; c1++) System.out.print(" "); // establishes the number of spaces before each asterisk 
      System.out.print("*"); 

      for (int c2 = 3; c2 <= c0*2; c2++) System.out.print(" "); //adds a space between both asterisks. This boolean check repeats for each line 
      System.out.print("*"); 
      System.out.println(); 

     } 


     for (int i = N ; i >= 1; i--) 
     { 
       for (int j = 0; j < (N - i); j++) 
        System.out.print(" "); 
       for (int j = 1; j <= i; j++) 
        System.out.print("*"); 
      for (int k = 1; k < i; k++) 
        System.out.print("*"); 
       System.out.println(); 
     } 

    } 
}