2013-10-01 37 views
2

我的程序打印出像這樣的鑽石打印鑽石:Java程序,從astericks需要調整

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

但是,如果參數或菱形的每一邊是4例如它只能如果我輸入6,底部三角形的間距是錯誤的,我一直試圖弄清楚。

當參數改變時,底部的三角形不會改變,只有最上面的那個會改變。它僅適用於輸入4

public static void printMoreStars (int n) 
{ 
    int rowsPrime= 0; 

    for (int i = n+1; i > 0; i--) 
    { 
     for (int j = 0; j < (2*i)-1; j++)  
     { 
      System.out.print(" "); 
     } 
     for (int d = 0; d < (2*rowsPrime)-1; d++) 
     { 
      System.out.print("*" + " "); 
     } 
     System.out.println(); //new line character 

     rowsPrime +=1; 
     System.out.println(" "); 
    } 


    //bottom triangle 
    for (int i = 1; i < n+1; i++) 
    { 
     for (int j = 0; j < (2*i)+1; j++)  
     { 
      System.out.print(" "); 
     } 
     for (int d = 0; d < rowsPrime; d++) 
     { 
      System.out.print("*" + " "); 
     } 
     System.out.println(); //new line character 

     rowsPrime -=2; 
     System.out.println(" "); 
    } 
} 

回答

2

您使用rowPrimes時犯了兩個錯誤。看到我的註釋如下:

public class Stars { 
    public static void main(String[] args) { 
    printMoreStars(Integer.parseInt(args[0])); 
    } 

    public static void printMoreStars (int n) 
    { 
    int rowsPrime= 0; 

    for (int i = n+1; i > 0; i--) 
    { 
     for (int j = 0; j < (2*i)-1; j++) 
     { 
     System.out.print(" "); 
     } 
     for (int d = 0; d < (2*rowsPrime)-1; d++) 
     { 
     System.out.print("*" + " "); 
     } 
     System.out.println(); //new line character 

     rowsPrime +=1; 
     System.out.println(" "); 
    } 

    rowsPrime -= 2; // <- middle line is already printed, so skip that 

    //bottom triangle 
    for (int i = 1; i < n+1; i++) 
    { 
     for (int j = 0; j < (2*i)+1; j++) 
     { 
     System.out.print(" "); 
     } 
     for (int d = 0; d < (2*rowsPrime) - 1; d++) // <- changed condition to be the same as above 
     { 
     System.out.print("*" + " "); 
     } 
     System.out.println(); //new line character 

     rowsPrime--; // <- you have to decrease rowPrime by one. 
     System.out.println(" "); 
    } 
    } 
} 
0
Check This :- 
import java.io.*; 

import java.lang.*; 

import java.util.*; 



class DiamondPattern 

{ 

     static public int ReadInteger() 

     { 

      try 

      { 

        String inpString = ""; 

        InputStreamReader input = new InputStreamReader(System.in); 

        BufferedReader reader = new BufferedReader(input); 

        String s = reader.readLine(); 

        return Integer.parseInt(s); 

      } 

      catch (Exception e) 

      { 

        e.printStackTrace(); 

      } 

      return -1; 

     } 



     public static void main(String[] args) 

     { 

      System.out.println("Program for displaying pattern of *."); 

      System.out.print("Enter the maximum number of *: "); 

      int n = ReadInteger(); 



      System.out.println("\nHere is the Diamond of Stars\n"); 



      for (int i = 1; i <= n; 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(); 

      } 



      for (int i = n - 1; 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(); 

      } 



      System.out.println(); 

     } 

}