IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Dessin avec boucle for


Sujet :

Langage Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut Dessin avec boucle for
    Bonjour,
    ce scripte dessine cette figure

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public class Projet3 {
    	public static void main(String[] args) {
     
    int i;
    int j;
     
    		for (i = 1; i <= 5; i++) {
     
    			for (j = 0; j < i; j++) {
     
    				System.out.printf("*");
     
    			}
     
    			System.out.printf("\n");
     
    		}
     
    	}
     
    }
    ce que voudrais en partant du script que je post c'est obtenir ceci

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

    merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tu vois que la deuxième forme est consitué des lignes de la première forme, suivies des lignes de la première forme, dans le sens inverse (sauf la plus longue) : ça devrait t'orienter sur la façon de le faire. Reprendre la même boucle, mais faire varier l'indice dans l'autre sens... à un décalage près pour ne pas avoir la dernière ligne.


    Voir par ailleurs Cette discussion qui traite de problèmes similaires.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci
    j'ai fait ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    public class Projet3 {
    	public static void main(String[] args) {
     
    		int indice =5;
    		int i;
    		int j;
     
    		for (i = 1; i <= indice; i++) {
     
    			for (j = 0; j < i; j++) {
    				/* affiche une etoile */
    				System.out.printf("*");
     
    			}
     
    			System.out.printf("\n");
     
    		}
     
    		for (i = indice-1; i > 0; i--) {
     
    			for (j = 0; j < i; j++) {
    				System.out.printf("*");
    			}
     
    			System.out.printf("\n");
     
    		}
     
    	}
    }
    y'a t'il une façon d’écrire ce script de manière plus optimisé ? ( tout en restant dans l'utilisation de boucles for imbriquées )

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il y a une petite erreur dans ton code : tu doubles la ligne la plus grande :

    *
    **
    ***
    ****
    *****
    *****
    ****
    ***
    **
    *
    
    Il ne faut pas refaire la boucle pour i = 5 pour la seconde partie, donc le code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public static void main(String[] args) {
    
    		int i;
    		int j;
    
    		for (i = 1; i <= 5; i++) {
    
    			for (j = 0; j < i; j++) {
    
    				System.out.printf("*");
    
    			}
    
    			System.out.printf("\n");
    
    		}
    
    		for (i = 4; i > 0; i--) {
    
    			for (j = 0; j < i; j++) {
    				System.out.printf("*");
    			}
    
    			System.out.printf("\n");
    
    		}
    
    	}
    Après l'optimer, difficile. Je ne vois pas trop quoi optimiser. On ne risque pas de gagner des masses de toutes manières.

    La boucle for (i = 1; i <= 5; i++) pourrait s'écrire for (i = 0; i <6; i++) pour gagner un pouillème peut-être, mais perdre la logique dans la borne.

    Maintenant, je ne vois pas d'autres solutions en conservant les for imbriqués

    Sinon, on pourrait stocker les lignes dans un stringbuilder, mais faudrait tester, je ne suis pas sûr que ça soit plus rapide (occupant plus de mémoire c'est sûr) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    StringBuilder sb = new StringBuilder(5);
     
    		for (int i = 0; i < 5; i++) {
     
    			sb.append("*");
    			System.out.println(sb);
     
    		}
     
    		for (int i = 0; i < 4; i++) {
     
    			sb.delete(sb.length()-1,sb.length());
    			System.out.println(sb);
     
    		}

    On peut le faire en récursif, mais ça ne sera pas plus optimisé (rien que la consommation liée à la pile sera de la perte). Après, il y a peut être une astuce qu'à laquelle je ne pense pas, mais tout le reste n'est que beaucoup d'effort pour optimiser quelque chose qui n'a pas vraiment besoin de l'être pour gagner quelques nanosecondes au mieux...

    La où on peut probablement gagner c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.println("*\n**\n***\n****\n*****\n****\n***\n**\n*\n");
    mais il n'y a pas de boucles
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Tu peux aussi le faire en récursif, AVEC des boucles (pas imbriquées)!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    	public static void main(String args[]) {
    		displayStar(1);
    	}
     
    	public static void displayStar(int index) {
    		System.out.println("");
    		for (int i = 0; i < index; i++) {
    			System.out.print("*");
    		}
    		if (index < 5) {
    			displayStar(index+1);
    		}
    		System.out.println("");
    		for (int i = 0; i < index - 1; i++) {
    			System.out.print("*");
    		}
     
    	}
    Je ne suis pas mort, j'ai du travail !

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par eulbobo Voir le message
    Tu peux aussi le faire en récursif, AVEC des boucles (pas imbriquées)!
    Avec if ( index>1 ) System.out.println(); en première ligne pour ne pas avoir de ligne vide supplémentaire en première ligne.


    On peut aussi faire ça si on veut s'amuser (à avoir un code dont il est difficile de savoir ce qu'il fait sans l'exécuter ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public static void main(String[] args) {
     
    		final StringBuilder s1 = new StringBuilder(4);
    		s1.append("*");
    		final String s2 = "\n*";
     
    		System.out.print(s1);
    		System.out.print(s2);
     
    		for(int i=0; i<3; i++) {
    			System.out.print(s1);
    			System.out.print(s2);
    			s1.append("*");
    		}
     
    		System.out.print(s1);
    		System.out.print(s2);
     
    		for(int i=0; i<3; i++) {
    			s1.setLength(s1.length()-1);
    			System.out.print(s1);
    			System.out.print(s2);
    		}
     
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    Il y a une petite erreur dans ton code : tu doubles la ligne la plus grande
    c'est vrai mais entretemps j'avais corrigé le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (i = indice-1; i > 0; i--)
    merci pour vos codes ça me permettra de les étudier pour avancer , même si je n'ai pas encore aborder certaines notions
    ( par exemple l'utilisation de la classe StringBuilder , la méthode append de la classe StringBuffer ou le recursif )
    là je m'entraine sur les boucle for

    encore merci

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Sauf que non, la meilleur optimisation est le paramétrage de l'indice de départ, de l'indice d’arrivée et de l’incrément, ce qui permet d’écrire une seule et unique boucle pour dessiner les deux cas de figure
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Avec if ( index>1 ) System.out.println(); en première ligne pour ne pas avoir de ligne vide supplémentaire en première ligne.
    J'avoue, j'ai été feignant sur le coup ^^

    On peut aussi faire ça si on veut s'amuser (à avoir un code dont il est difficile de savoir ce qu'il fait sans l'exécuter ):
    Nom : evilest.gif
Affichages : 1910
Taille : 109,7 Ko
    Je ne suis pas mort, j'ai du travail !

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Je viens de voir ce petit programme qui fait un triangle .... cela me rapelle qu'en cours nous avons fait de même et je pense que cela doit être finalement un standard de l'apprentissage

    Donc dans l'esprit de rajouter une difficulté pour t'aider à progresser, comment ferais-tu le même triangle mais en dessinant les bords avec des caractères différent des caractères du centre du triangle (c'était la suite de l'exercice que le prof nous a donné ...)

    OS : LinuxMint 20

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci francky74 , je vais essayé de faire ton exo (il va me falloir un peu de temps !)..perso je me forme tout seul avec des bouquins et des tutoriels sur le net.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    bon...ça chauffe dur dans le ciboulot et je n'ai pas trouvé. je ne suis pas assez avancé en java.
    j'ai pensé à utiliser un tableau et faire des conditions mais je n'ai pas trouvé ( pas encore !)

    j'ai trouvé un script sur le net ( me rappelle plus le site ) ou il donne un script qui dessine un triangle (inversé) avec au bord un caractère et à l’intérieur du triangle un autre caractère ( en fait c’était des espaces à l’intérieur et à l’extérieur du triangle)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class DessinTriangle {
        static int iteration = 0;
     
        public static void Triangle(int n) {
            int nombreEspaceExterne = n - iteration;
            int nombreTiret = iteration > 0 ? iteration * 2 - 1 : 0;
            String espace = new String(new char[nombreEspaceExterne]).replace("\0", " ");
            String tiret = new String(new char[nombreTiret]).replace("\0", "-");
            String etoile = "*";
            String ligne = iteration == n - 1 ? espace + new String(new char[n * 2 - 1]).replace("\0", "*") + espace : iteration > 0 ? espace + etoile + tiret + etoile + espace : espace + etoile + espace;
     
            iteration++;
            if (iteration < n) {
            	Triangle(n);
            }
     
            System.out.println(ligne);
        }
     
        public static void main(String[] args) {
        	Triangle(7);
        }
    }
    si quelqu'un trouve comment faire ça avec des tableaux ça serait super

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    pas fais gaffe mais dans le script plus haut il y'a des tableaux ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new String(new char[nombreEspaceExterne])

  14. #14
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ce code est affreux.

    Premièrement le devoir de clarté doit remporté sur la concision de code :

    Les String ligne = iteration == n - 1 ? espace + new String(new char[n * 2 - 1]).replace("\0", "*") + espace : iteration > 0 ? espace + etoile + tiret + etoile + espace : espace + etoile + espace;sont peut-être valables dans un concours du programme tenant sur le moins de lignes (cf le 2 lignes de hebdogiciel), mais le meilleure moyen d'apprendre à faire ce qui par la suite est une plaie pour la maintenance du code.

    Ensuite, on a le droit (voire le devoir) de faire des méthodes :
    String espace = new String(new char[nombreEspaceExterne]).replace("\0", " ");Ici, la volonté est probablement d'écrire un code concis (dans le même esprit abscons que le point ci-avant), tout en faisant une accrobatie absurde (le replace).
    Une méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public static String creer(char c, int nombre) {
    char[] array = new char[nombre];
    Arrays.fill(array, c);
    return new String(array);
    }
    sera plus clair et accessoirement plus efficace.

    La variable iteration déclarée en variable de classe est une hérésie. Non seulement, la méthode Triangle ne peut être appelée qu'une seule fois, mais ne pourra pas être utilisée concuremment dans plusieurs threads. Dans le contexte, ça n'a sûrement aucune utilité, mais dans le cas général, c'est une structure qu'il vaut mieux effacer de sa mémoire, pour éliminer le risque de le faire dans un contexte plus général, où les dysfonctionnements conséquents seront plus difficiles à déboguer.

    On peut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void Triangle(int n) {
        	Triangle(n, 0);
        }
        private static void Triangle(int n, int iteration) {
           /*...*/
           iteration++;
           if (iteration < n) {
               Triangle(n, iteration);
           }
           /*...*/
        }
    Les résultats pour n<2 sont incohérents.

    Enfin, il y a des conventions en Java : les méthodes commencent toujours par une minuscule.

    Comme ça (dans le même esprit d'algorithme), ça me semble plus clair, non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class DessinTriangle {
     
        private final static char FILL = '-';
        private final static char BORDER = '*';
        private final static char BACKGROUND = 'x';
     
        public static void triangle(int n) {
        	if ( n>0 ) {
        		triangle(n, 0);
        	}
        }
        private static void triangle(int n, int iteration) {
            int nombreEspaceExterne = iteration + 1; // nombre d'espaces de chaque côté
            int longueur = n * 2 + 1; // longueur de ligne
     
            char[] ligne = new char[longueur]; 
     
            if ( nombreEspaceExterne>0 ) {
               Arrays.fill(ligne, 0, nombreEspaceExterne, BACKGROUND); // espaces à gauche
               Arrays.fill(ligne, ligne.length-nombreEspaceExterne, ligne.length, BACKGROUND); // espaces à droite
            }
     
            final int bordureGauche = nombreEspaceExterne; // position bordure
            final int bordureDroite = ligne.length - bordureGauche - 1; // position bordure
         	ligne[bordureGauche]=BORDER; // bordure gauche
    	ligne[bordureDroite]=BORDER; // bordure droite
     
    	if( bordureDroite>bordureGauche ) {
    	   Arrays.fill(ligne, bordureGauche+1, bordureDroite, iteration==0?BORDER:FILL); // pas de remplissage pour la ligne de base, mais une bordure
    	}
     
            System.out.println(new String(ligne));
     
            iteration++;
            if (iteration < n) {
            	triangle(n, iteration);
            }
     
     
        }
     
        public static void main(String[] args) {
        	triangle(7);
        }
    }
    Voire comme ça (sans espaces supplémentaires superflues) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    public class DessinTriangle {
     
        private final static char FILL = '-';
        private final static char BORDER = '*';
        private final static char BACKGROUND = ' ';
     
        public static void triangle(int n) {
        	if ( n>0 ) {
        	   triangle(n-1, 0);
        	}
        }
        private static void triangle(int n, int iteration) {
            int nombreEspaceExterne = iteration; // nombre d'espaces de chaque côté
            int longueur = n * 2 + 1; // longueur de ligne
     
            char[] ligne = new char[longueur]; 
     
            if ( nombreEspaceExterne>0 ) {
               Arrays.fill(ligne, 0, nombreEspaceExterne, BACKGROUND); // espaces à gauche
               Arrays.fill(ligne, ligne.length-nombreEspaceExterne, ligne.length, BACKGROUND); // espaces à droite
            }
     
            final int bordureGauche = nombreEspaceExterne; // position bordure
            final int bordureDroite = ligne.length - bordureGauche - 1; // position bordure
         	ligne[bordureGauche]=BORDER; // bordure gauche
    	ligne[bordureDroite]=BORDER; // bordure droite
     
    	if( bordureDroite>bordureGauche ) {
    	    Arrays.fill(ligne, bordureGauche+1, bordureDroite, iteration==0?BORDER:FILL); // pas de remplissage pour la ligne de base, mais une bordure
    	}
     
            System.out.println(new String(ligne));
     
            if (iteration < n) {
                iteration++;
                triangle(n, iteration);
            }
     
     
        }
     
        public static void main(String[] args) {
        	Triangle(7);
        }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #15
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    La mise en pratique des différentes suites mathématiques (Fibonacci..) est un bon exercice également si tu souhaites progresser dans la compréhension des boucles.


    * Ecrire un programme qui affiche les 45 premiers éléments de la suite de Fibonacci.
    * 1 1 2 3 5 8 13 21 34 55 89 ...
    * Chaque élément de la suite (sauf les deux premiers) est calculé en additionnant les deux éléments qui le précèdent.
    *


    Bon courage.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    grand merci drigo pour la clarification du code ( qui n'est pas de moi hien , je suis pas encore avancé pour faire ce genre de code, même moche)
    c’est très instructif , ça va me faire progresser et me donne de bonnes pratiques.

    merci pandora
    suite de Fibonacci, triangle de Pascal , ce sont effectivement de bon exercices

    bon week end !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] tri d'un resultat avec boucle for
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/09/2007, 15h30
  2. script avec boucle for
    Par gloglo dans le forum Langage SQL
    Réponses: 16
    Dernier message: 30/05/2007, 15h30
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 10h52
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 10h26
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo