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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    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 : 56
    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
    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 éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    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 : 56
    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
    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 Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    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("*");
    		}
     
    	}

  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 : 56
    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
    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.

+ 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