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 :

[debutant] boucle trop longue?


Sujet :

Langage Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut [debutant] boucle trop longue?
    Salut à tous!

    J'ai écris un code qui génère un paquet de carte mélangé. Mais à l'éxécution ma fenêtre ms-dos s'ouvre et rien ne s'affiche.
    Mon processeur est à 100% même après 2 ou 3 minutes.

    Je suis à peu près sûr que c'est ce code là qui fait ça :
    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
    	//Création d'un paquet mélangé et distribution en 2 paquets différents
     
     
    	int[] listeHasard = ArrayInt.genereRandomArrayAllDifferent(52); 
                   //génère un tableau de 52 éléments avec des chiffres uniques allant de 1 à 52
     
    	Carte[] paquet = new Carte[52];
                  //tableau final avec des objets Carte dans le désordre
     
    	for (int i=0;i<listeHasard.length;i++){
    		int value;
    		int suit;
    		if (listeHasard[i]<14){
    			value = listeHasard[i]-1;
    			suit = 0;
    			Carte c = new Carte(value,suit,tab);
    			paquet[i] = c;
    		}
    		if (13<listeHasard[i] && listeHasard[i]<27){
    			value = listeHasard[i]-13-1;
    			suit = 1;
    			Carte c = new Carte(value,suit,tab);
    			paquet[i] = c;
    		}
    		if (26<listeHasard[i] && listeHasard[i]<40){
    			value = listeHasard[i]-26-1;
    			suit = 2;
    			Carte c = new Carte(value,suit,tab);
    			paquet[i] = c;
    		}
    		if (listeHasard[i]>39){
    			value = listeHasard[i]-39-1;
    			suit = 3;
    			Carte c = new Carte(value,suit,tab);
    			paquet[i] = c;
    		}
     
    	}
    Je sais que cette boucle sera effectuée 52 fois avec 4 tests à chaque fois, mais je pense que les processeurs actuels sont assez puissants pour encaisser ça!

  2. #2
    Membre actif Avatar de jibbi
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    165
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 165
    Points : 205
    Points
    205
    Par défaut
    Bonsoir,
    mise à part ta structure if qui me donne un mal de tête ,
    Je ne vois pas de problème.

    tu pourrais clarifier comme ca:
    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
     
    for (int i = 0; i < listeHasard.length; i++){
    			if (listeHasard[i] < 14){			
     
    			}
    			else if (listeHasard[i] < 27){
     
    			}
    			else if (listeHasard[i] < 40){
     
    			}
    			else {
     
    			}
    		}


    Ajoute System.err.println(i + ", "); pour voir ce qui ce passe.

    Ca viens peut-être de new Carte() ?
    Peut-on voir cette classe

  3. #3
    Membre actif Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Points : 221
    Points
    221
    Par défaut
    Hello,

    Franchement, un boucle executée 52 fois avec 4 if dedans, c'est pas énorme!

    A mon avis, si ton processeur met plus d'1-2 secondes, c'est qu'il bloque quelquepart... (genre boucle infinie)

    Regarde du côté de ton constructeur de Carte... Il fait quoi? T'as le code? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Carte c = new Carte(value,suit,tab);
    Essaie de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("TESTX");
    avant ton constructeur et après. S'il affiche pas le texte, c'est qu'il arrive pas jusque là...

    A+

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 164
    Points : 303
    Points
    303
    Par défaut
    J'ai appliqué les conseils que vous m'avez donné, les TESTX s'affichent avant et après le constructeur, et System.err.println m'affiche les nombres de 0 à 51.

    Donc ma boucle fonctionne bien, j'ai trouvé l'erreur plus bas, c'étaient des lignes de code superflues qui me permettaient de tester et afficher mes cartes.

    AVANT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	Carte maCarte = new Carte(tab);
    	Carte maCarte2 = new Carte(12,2,tab);
     
    	for (int i=0;i<paquet.length;i++){
    		System.out.println(paquet[i].toString());
    	}
     
    	System.out.println(maCarte.toString());
    	System.out.println(maCarte.isFree(tab));
    	System.out.println(maCarte2.isFree(tab));
    	System.out.println(tab[2][2]);
    MAINTENANT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i=0;i<paquet.length;i++){
    		System.out.println(paquet[i].toString());
    	}
    Par contre je ne comprends pas pourquoi ça bloquait.


    Problème gommé mais pas résolu.

    Voici le code de mon constructeur pour ceux que ça intéresse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public Carte(int value, int suit, boolean tab[][]){
    		if (tab[value][suit]){
    			this.value = value;
    			this.suit = suit;
    			tab[value][suit] = false;
    		}
    	}
    //value : valeur de la carte as,2,3 .... v,d,r
    //suit : couleur coeur, carreau...
    //tab : tableau de booléens à 2 dimensions qui me sert à savoir si une carte a déjà été distribuée ou non

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

Discussions similaires

  1. Ameliorer code : Boucle trop longue
    Par diego45 dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/12/2014, 10h55
  2. Boucle trop longue
    Par Vivien57 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/05/2011, 08h49
  3. Réponses: 9
    Dernier message: 24/12/2007, 11h27
  4. [TP]Probleme de ligne trop longue
    Par poppels dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 24/09/2004, 06h36
  5. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36

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