2011-02-26 3 views
4

Comment imprimer un diamant de manière récursive en utilisant Java avec seulement la taille voulue?Java: Imprimer un diamant de façon récursive

une taille de 5 produit:

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

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

Code I ont jusqu'à présent

public static void dia(int statSize, int size,int count) { 

     int statSizeLarge = (statSize*2)+1; 

     // Params: 
     // statSize == static size, never change this 
     // size == variable size, change this 
     // count == counter 

     if(size==0) { 
       System.out.println(); 
     } else { 

      // is the counter smaller then the size 
      // if yes, increment and keep printing 
      if(count<size){ 
       System.out.print("*"); 
      } 



      // is greater then size? 
      // if yes, move on, print 
      // a few more stars 
       if((count<=statSizeLarge)){ 
        if(count<statSize+1 && (count>size)){ 
         System.out.print(" "); 
        }else if (count>size+1){ 
         System.out.print("*"); 
        } else {} 
        dia(statSize,size,count+1); 
       } 



     // reset count, move to next element 
      if(count>=statSizeLarge) { 
       count = 0; 
       System.out.println(); 
       dia(statSize,size-1,count); 
      } 



     } // ends Else 

    } 

OutPut:

Enter commands: 
diamond 3 
****** 
** **** 
* **** 




* **** 




** **** 
* **** 




* **** 
+0

Astuce: notez tous les modèles dans l'exemple que vous avez donné? – Amber

+1

Oui c'est les devoirs. C'est déjà dû. J'ai essayé de le compléter mais je ne pouvais pas. Je cherche un moyen de le faire pour que je puisse comprendre. –

+0

Qu'avez-vous jusqu'à présent? –

Répondre

6

Pour créer un plus grand diamant, prendre une plus petite et ajouter deux rangées et colonnes supplémentaires. Dans le diagramme ci-dessous, j'ai remplacé les espaces par des points pour plus de clarté. Dans le second losange, les caractères nouvellement ajoutés sont indiqués en gras. Votre fonction récursive devrait imprimer la première ligne, puis imprimer un diamant plus petit avec deux colonnes supplémentaires au milieu, puis la dernière rangée.

En pseudocode:

void diamond(stars, spaces) { 
    if (n == 0) { 
     print(' ' * spaces) 
    } else { 
     print('*' * stars, ' ' * spaces, '*' * stars) 
     diamond(stars - 1, spaces + 2) 
     print('*' * stars, ' ' * spaces, '*' * stars) 
    } 
} 

Depuis c'est un exercice d'apprentissage, je ne vais pas vous donner le code source Java - vous pouvez avoir un aller à l'écrire vous-même. Ici vous pouvez voir en ligne en cours d'exécution en Python, juste pour que vous pouvez voir que l'algorithme fonctionne:

+0

Ummm ... maintenant il doit aussi apprendre Python :-) –

1

Astuce: rechercher le modèle dans la sortie. Essayez de mapper ce modèle sur des appels récursifs, où une méthode fait quelque chose, appelle lui-même, puis fait quelque chose d'autre.

0

Voici le programme Java pour imprimer le diamant d'étoiles:

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(); 
    } 
}