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

avec Java Discussion :

comparaison lexicographique avec compareTO


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut comparaison lexicographique avec compareTO
    Bonjour
    Ici j ai un code truffer des erreurs je fais mes début en java.
    l'idee c'est que j 'ai un tableau R
    je souhiate faire une comparaison lexicographie de ses elts et les mettre dans le tableau chaine.
    Mais de puis plusieurs heures je tourne en rond.
    Merci pour votre aide


    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
     
    import java.util.*;
    public class couverture {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    	}
     
    }
     
    class couvre{
    	//List<String> chaine =new ArrayList<String>();
    	//List<String> x =new ArrayList<String>();
    	int n=25;
    	double R[] = {11,12, 13,14, 15, 21, 22, 23,24, 25, 31, 32, 34, 35, 41, 42, 43, 44, 45, 51, 52, 53, 54, 55 };
    	double chaine[] = new double[(int) (n+1)];
    	double x[] = new double[(int) (n+1)];
    	// comment faire pour avoir un tableau dynamique
    	/* c'est a dire augmenter la taille quand j ajoute un nouveau elt, pas inialiser la taille avant*/
     
    	int i=0;
    		while(R.length >0){// ici erreur n'accepte pas length????
    			x[1]= R[1];
    			i++;
    			chaine[i]=x[1];
     
    			while(x.length >0){// (tant que x est different de l'ensemble vide)
    				x[i]= x[i].compareTo(R[i]);
    				chaine[i]=chaine[i]+ x[i]; // concaténe et revoie la nvlle chaine
    				System.out.println("chaine["+i+"]"chaine[i]);
    			}
    			R[i]= R[i]- chaine[i];// retire elt i de la chaine dans le tableau R 
     
    System.out.println("R["+i+"]" R[i]);
    		}
     
    }

  2. #2
    Membre averti
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 40
    Par défaut
    Bonjour,

    alors déjà c'est R.length() il me semble pour récupérer la taille de ton tableau.

    Attention que tu risque aussi de sortir de ton tableau si jamais ce dernier ne se termine pas pas un 0.

    Tu veux trier les éléments en fait et les remettre dans la chaine ou bien tu veux les concaténer?

    /!\ que dans ton main tu ne fait nul part appel à ta classe "couvre" qui fait le traitement de tes tableaux /!\

    en espérant t'avoir un peu aider
    Moufasa

  3. #3
    Membre confirmé Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut
    Pas de probleme pour le main, une fois que la class couvre va marcher je vais l'appeler labas

    Il y a un tri effectuter avec la fonction compareTo (comparaison lexicographique)
    et enuite une concaténation entre x et la chaine .
    Merci d'avance

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oulala.

    As-tu déjà fait de la programmation Objet avant ? Si tu n'en as jamais fait, te renseigner sur la programmation orientée objet t'aiderait sans doute à éviter bon nombre d'erreurs et surtout d'éviter les frustrations du style "On a corrigé mon erreur, mais j'ai toujours pas compris comment marchait ce $@ù# de langage".


    Sinon pour commencer :

    Une classe n'est pas une fonction. Tu ne peux pas mettre du code directement dedans.
    Tu ne peux mettre qu'une seule classe par fichier.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    comment faire pour avoir un tableau dynamique
    Dans ce cas, on utilise pas des tableau, mais des List<>, qui ont une taille variable. Si tu ne connais pas la taille à la compilation, mais que tu connais la taille au moment de l'exécution, tu peux créer ton tableau avec le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau = new Double[taille];
    while (R.length >0)
    ton tableau a une taille qui ne changera pas, le R.length ne changera donc pas.

    x[i]= x[i].compareTo(R[i]);
    tu mélange les pommes et le poires. x[i] et R[i] sont des double, le résultat de compareTo sera un int avec la règle suivante: "0", "<0" ou ">0". T'as aucune règle sur la valeur de retour autre que la règle du signe -> j'ai du mal à concevoir un algorithme qui convertit cette valeur en double.

    Je crois que ton problème principal c'est que tu utilise des tableaux (taille fixe) là où il te faut des List que tu vide au fur et à mesure d'avancement de l'algorithme.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'insiste un peu sur le fait que la compréhension des principes de base du java est importante, mais à mon avis si tu comptes vraiment passer du temps sur le langage Java et que tu repars d'ici avec des recettes toutes faites tu vas passer beaucoup de temps à t'arracher les cheveux dans le futur.

    Je te conseille vivement la lecture de ce tutoriel : http://java.developpez.com/livres/javaEnfants/

    Ça peut paraître un peu infantilisant au premier abord, mais je n'ai eu que d'excellents retours.

  7. #7
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    Citation Envoyé par kei2906 Voir le message
    Tu ne peux mettre qu'une seule classe par fichier.
    je dirais qu'il est conseillé de ne mettre qu'une classe dans un fichier, mais on peut faire plusieurs classe dans un fichier.

  8. #8
    Membre confirmé Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Par défaut
    Merci
    je pense que tu as raison, je devrais faire usage les List et non les tableaux.
    je vais m y mettre.
    Pas contre je dois utiliser compareTo pour faire la comparaison de ses nombres
    car si je compare 41 et 93 on a 93 qui est retenu car 3 est meilleurs que 1
    de meme 52 et 17 on prends 17 car 7 est meilleurs que 2.

    Puis pour avoir mes nombre j'ai déclarer des doubles ( algorithme developpé précédement)pour faire le tableau R
    System.out.println(String.valueOf(R[k])

    Pour essayer de convertir le tableau qui etait initialment en double de le convertir en String, ça ne marche pas dans la mesure ou quand j appelle la fonction compareTo, je me dis que le tableau R contient les Double.
    Comment y arriver pour les convertir en String

  9. #9
    Membre Expert
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Par défaut
    pour un tableau ou tu pourras ajouter/enlever les élément de maniéré dynamique, utiliser l'objet List.

    Autre chose, je ne comprend pas bien pourquoi tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x[1]= R[1];
    i++;
    chaine[i]=x[1];
    ca donne l'impression que tu ne fais les testes que pour le premier élément (ou alors j'ai pas bien compris ton code).
    est que ca ne devrais pas plutôt être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x[i]= R[i];
    i++;
    chaine[i]=x[i];
    aussi dans cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while(x.length >0){
    	x[i]= x[i].compareTo(R[i]);
    	chaine[i]=chaine[i]+ x[i];
    	System.out.println("chaine["+i+"]"+chaine[i]);
    }
    il n'y a pas de condition de sortie (pas d'évolution des éléments du tableau, notamment des indices). Donc a mon avis ca va bouclé.


    Pour que nous puissions un peut plus t'aider (car je doit l'avouer je n'ai pas très bien compris ton code), essai de mieux expliqué ce que tu fais.

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Pour avoir des "tableaux" à taille variable, tu vas devoir t'intéresser aux collections proposées par les API de base : par exemple, ArrayList.

    L'instruction "R.length" ne devrait pas poser de problème, de quel genre d'erreur parles-tu ?


    En ce qui concerne l'algorithme dans ton code, je n'arrive pas à comprendre ce que tu veux faire, vu les erreurs logiques qu'il contient et le décalage entre les instructions et les commentaires... et donc je ne sais pas trop quoi te conseiller comme correction.
    J'ai quand même au moins deux remarques :

    Déjà, les tailles des tableaux sont fixes, donc tes boucles sont des boucles infinies.
    Si tu veux effectuer un parcours de ton tableau,la solution classique est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double[] tab = {1, 2, 3};
    for (int i = 0 ; i < tab.length ; i++) {
       // traitement sur le i-ième élément du tableau
       System.out.println("tab["+i+"]="+tab[i]);
    }
    Si ton but était de "vider" le tableau, comme le suggère ton test sur la longueur du tableau, il va falloir utiliser une structure de liste, pas un tableau de taille fixe.

    Tu appelles la fonction compareTo et tu parles de concaténation de chaînes de caractère alors que les éléments de tes tableaux sont des double... Je suppose qu'il s'agit d'un effet secondaire d'une "simplification" de ton code effectuée avant de le poster ici, et qu'en fait tu manipules des String ? (ce qui serait le plus logique puisque tu parles de comparaison lexicographique)
    Dans ce cas, l'instruction [I]R[i]= R[i]- chaine; n'a aucun sens : pour les chaîne de caractère, l'opérateur "+" représente une concaténation, mais l'opérateur "-" n'est pas défini.

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

Discussions similaires

  1. [TOMCAT] Probleme avec CompareTo
    Par TOPGUN89 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 07/07/2006, 18h22
  2. prob avec compareTo et equals..
    Par eureka dans le forum Langage
    Réponses: 1
    Dernier message: 27/03/2006, 09h08
  3. [comparaison] probleme avec les accents
    Par Bibicmoi dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 29/08/2005, 20h51
  4. [C#] Problème avec CompareTo
    Par defacta dans le forum ASP.NET
    Réponses: 6
    Dernier message: 05/05/2004, 14h01
  5. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08

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