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

  1. #1
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    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 du Club
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 40
    Points : 42
    Points
    42
    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 régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    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
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    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.

  5. #5
    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.

  6. #6
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    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.

  7. #7
    Membre chevronné
    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
    Points : 1 788
    Points
    1 788
    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.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  8. #8
    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.

  9. #9
    Membre chevronné
    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
    Points : 1 788
    Points
    1 788
    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.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  10. #10
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    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

  11. #11
    Invité
    Invité(e)
    Par défaut
    je dirais qu'il est conseillé de ne mettre qu'une classe dans un fichier, mais on peut faire plusieurs classe dans un fichier.
    C'est vrai.

    Pour être vraiment précis on peut avoir plusieurs classes par fichier, mais :

    1. Une seule classe doit être déclarée public.
    2. Le fichier source doit porter le nom de la classe qui est déclarée publique.
    3. Si une méthode main a était définie elle devra nécessairement être au sein de la classe déclarée publique.

    Ceci dit ça ne règle pas le problème du code qui a été directement déposé dans la classe.
    D'ailleurs je suis pas mal surpris que tout le monde cherche à résoudre les problèmes algorithmiques de nypahe sans avoir même remarqué ce problème de syntaxe basique...

  12. #12
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    Par défaut
    ce que tu raconte la je sais
    c'est juste un bout d'un algorithme que j'ai copié dans une classe
    ce qui m'intéresse c'est la logique de mon code, et la critique sur le deroulement

    Citation Envoyé par kei2906 Voir le message
    C'est vrai.

    Pour être vraiment précis on peut avoir plusieurs classes par fichier, mais :

    1. Une seule classe doit être déclarée public.
    2. Le fichier source doit porter le nom de la classe qui est déclarée publique.
    3. Si une méthode main a était définie elle devra nécessairement être au sein de la classe déclarée publique.

    Ceci dit ça ne règle pas le problème du code qui a été directement déposé dans la classe.
    D'ailleurs je suis pas mal surpris que tout le monde cherche à résoudre les problèmes algorithmiques de nypahe sans avoir même remarqué ce problème de syntaxe basique...

  13. #13
    Membre chevronné
    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
    Points : 1 788
    Points
    1 788
    Par défaut
    est que tu peux nous dire clairement ce que tu veux faire, car je n'arrive pas franchement a te suivre (a travers ton code).
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  14. #14
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    Par défaut
    voici ce que je veux faire, mais ce 'est la galere avec les listes
    compareTo et l' addition des chaines chaine
    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
     
    List R;
    List chaîne
    Tant que (R différent de l ensemble vide)
    Début
    /* Les chaînes se construisent à partir du premier élément de R */
    x = R[1]
    i = i + 1
    Chaînes[i] = x
    Tant que x (différent de l ensemble vide)
    Début
    if( R.comparaTo(x)>0){
     
    Chaînes[i] = Chaînes[i] + x
    }
    Fin
    /* Retirer les éléments constituant la chaîne créée de R */
    R = R - Chaînes

  15. #15
    Invité
    Invité(e)
    Par défaut
    Au temps pour moi. Ceci dit tu avoueras que présenter ton code comme ça, comme si il se trouvait à la racine de la classe c'était troublant.

    Pour ton algo... C'est effectivement un peu confus. Tu devrais nous dire ce que tu essaie de faire en "français" et pas en pseudo-code.
    Par exemple je ne comprend pas bien ce que tu attends en sortie de ton algo.

    Est-ce qu'en entrée tu as un tableau avec une liste de mots et en sortie tu veux un deuxième tableau avec la même liste de mots, mais dans l'ordre alphabétique ?
    Est-ce que ce n'est pas une liste de mots, mais de chiffres que tu dois trier ?

    Dans ces deux cas tu as "juste" besoin d'un algorithme de tri et le tien me semble largement boiteux (même en dehors des erreurs de code).
    Pour les algorithmes de tri tu en trouveras sans doute des tas en cherchant sur le forum (tri à bulles, tri direct, etc...) ou sur ton moteur de recherche préféré.

    Une dernière remarque sur ta fonction de comparaison :
    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.
    L'ordre lexicographique pour des nombres donne la même chose que l'ordre numérique classique, car l'ordre lexicographique part du caractère gauche (si tu dois comparer les mots 'ablation' et 'abreuvoir' tu vas commencer à comparer les deux 'a' et pas le 'n' et le 'r').
    Ceci dit tu as peut-être besoin d'un ordre lexicographique "inversé" (en partant du caractère le plus à droite), mais il ne faudra pas l'appeler "ordre lexicographique" dans ce cas.

  16. #16
    Membre régulier Avatar de nypahe
    Inscrit en
    Novembre 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 174
    Points : 85
    Points
    85
    Par défaut
    Je ne comprends jamais tes remarques
    LIst R // c'est une liste
    je n'ai dit nul part que j avais un tableau.
    je pense que mon probleme tu ne le comprends pas.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Mais même avec ton pseudo code on retrouve les mêmes erreurs logiques qui font qu'on ne comprend rien à ce que tu essayes de faire !
    Entre autres :
    - dans la boucles "tant que x non vide" tu ne modifies jamais la liste x, et donc elle ne sera jamais vide, et donc tu ne sortiras jamais de la boucle !
    - R est une liste, x est une liste, que signifie cette comparaison entre R et x ???

    Donc explique-nous en français, sans code, ce que tu essaies de faire : quelles données en entrée de l'algo, quelles données en sortie

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par nypahe Voir le message
    Je ne comprends jamais tes remarques
    LIst R // c'est une liste
    je n'ai dit nul part que j avais un tableau.
    je pense que mon probleme tu ne le comprends pas.
    Apparemment je ne suis pas le seul à ne pas tout comprendre.

    Concernant la liste R, je parle de tableau aussi bien que de List parce que la différence tableau/liste est une différence d'implémentation et là j'essayais de comprendre ton problème de manière générale, sans rentrer dans les détails du Java. Donc pour moi Liste = Tableau.

    Je vais reprendre rapidement ce que j'ai compris de ton problème :
    Citation Envoyé par nypahe
    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.
    Tu essaies de trier le contenu d'un tableau (ou d'une liste si tu préfères) de nombres suivant l'ordre lexicographique.

    Solution : utilise un algorithme de tri, il en existe plusieurs de bien connus.

+ 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