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 :

concat qui ne marche pas


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut concat qui ne marche pas
    Bonjour,
    Ce que je voudrais faire est tout bête : ajouter à un string à chaque tour de boucle une lettre. Vous allez me dire que je vous fais perdre votre temps (oui peut être je le reconnais) mais là ca marche pas du tout.
    Voici donc mon code:

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    import java.io.File;
    import java.util.Map;
     
    import org.biojava.bio.structure.AminoAcid;
    import org.biojava.bio.structure.Chain;
    import org.biojava.bio.structure.Group;
    import org.biojava.bio.structure.GroupIterator;
    import org.biojava.bio.structure.Structure;
    import org.biojava.bio.structure.io.PDBFileReader;
     
    public class Pdbvieux {
     
    	public static void main (String[] args){
    		//fonctionne egalement avec les fichiers
    		 // compresses par zip
    		File filename = new File ("/home/chemin/vers/1PW4.pdb");
    		String sequence = "";
     
    		 PDBFileReader pdbreader = new PDBFileReader();
     
    		 // optionel: le lecteur peut aussi lire les structure secondaires 
    		 // tel que decrites dans l'en-tet du fichier PDB pour les ajouter
    		 // aux acides amines
    		 pdbreader.setParseSecStruc(true);
     
    		 try{
    		     Structure struc = pdbreader.getStructure(filename);
     
    		     System.out.println(struc);
     
    		     GroupIterator gi = new GroupIterator(struc);
     
    		     while (gi.hasNext()){
     
    		           Group g = (Group) gi.next();
     
    		           if ( g instanceof AminoAcid ){
    		               AminoAcid aa = (AminoAcid)g;
    		               Map sec = aa.getSecStruc();		      
    		               Chain  c = g.getParent();
    		               //System.out.println(c.getName() + " " + g + " " + sec);
     
                                   // LE PROBLÉME SE SITUE ICI
    		               char acideamine=aa.getAminoType();
    		               String result = String.valueOf(acideamine);
    		               System.out.print(result);
    		               sequence.concat(result);
     
    		           }
    		           System.out.println(sequence);
    		     }
     
    		 } catch (Exception e) {
    		     e.printStackTrace();
    		 	}	
     
    	}
    }
    Mon concat ne marche pas du tout : pourtant dans mon "system.out.println" de result j'ai bien des caractères (qui ont été converti en string) qui sont affichés.
    Je voudrais savoir si c'est l'influence d'une éventuelle réécriture (dû à une autre des mes autres classes contenues dans eclipse) de "concat" ou si ca vient de mon script.

    Voici la page où vous trouverez le fichier 1PW4.pdb (j'ai essayé de le mettre en pièce jointe mais le format n'est pas valide):
    http://www.rcsb.org/pdb/cgi/explore.cgi?pdbId=1PW4

    Vous cliquez simplement sur la petite icone à coté du titre "1PW4"

    Merci beaucoup pour votre aide ,

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Bonjour, la JavaDoc nous dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public String concat(String str)
    "cares".concat("s") returns "caress"
     "to".concat("get").concat("her") returns "together"
    Hum tiens ça retourne une String ... ah bah oui l'exemple donné semble dire "returns" ... Il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sequence = sequence.concat(result);

  3. #3
    Membre éclairé
    Profil pro
    Architecte logiciel
    Inscrit en
    Janvier 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 28
    Par défaut
    concat ne peut pas avoir été changée ( surchargée), c'est une méthode de la classe finale java.Lang.String.

    [doublon avec le post du dessus]
    il faut affecter la valeur a sequence, pour qu'elle change ( sequence = sequence.concat("blabla"); ) car concat ne change pas la valeur de la String elle meme, c'est une fonction qui ne change pas l'état de l'objet.
    [/doublon avec le post du dessus]

    Dans ton cas l'opérateur à utiliser est la concatenation : '+='
    de plus cet opérateur pourra concatener ton objet de type char
    donc au final tu devrais avoir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
     // LE PROBLÈME SE SITUAIT ICI
     sequence += aa.getAminoType();
    a la place de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     // LE PROBLÉME SE SITUE ICI
     char acideamine=aa.getAminoType();
    String result = String.valueOf(acideamine);
    System.out.print(result);
    sequence.concat(result);
    par contre tu affiches ta sequence a chaque iteration de groupe sans réinitialiser sa valeur. ( c'est peut etre normal). il faudrait peut etre l'afficher une fois toutes les iterations faites.

  4. #4
    Membre chevronné Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Par défaut
    Erreur classique d'utilisation de cette méthode ............ totalement inutile.

    Franchement personne n'utilise ca.

    StringBuffer/Builder

  5. #5
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut
    Merci beaucoup et désolée ma question était vraiment inutile comme tu dis.
    Puisque je vous ai sous la main et comme on est dans la série des questions inutiles, j'ai trouvé une .class qui m'intéresse sur un site internet et je voudrais lire ce que fait cette classe. Cependant, je n'arrive pas à l'afficher dans mon éditeur de texte ni dans eclipse.
    Dernière question après c'est promis je m'en vais !
    Merci Merci

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Un .class est un .java compilé, il contient du ByteCode et tu ne pourras donc pas le lire (à moins de t'appeler JVM ). Bref c'est un peu comme si tu avais un .exe et que tu voulais les sources C++ ...

    Il existe cependant un moyen, la décompilation, afin de retrouver le code source .java depuis ton .class, mais ce procédé modifie parfois le code de base, ce qui en complique la compréhension. De plus, si ce .class est passé par une obfuscation, c'est à dire une sorte de cryptage du ByteCode, alors tu n'y comprendra rien car les méthodes s'appelleront a(), b() ... bref ... illisible.

    Regarde quand même dans les logiciels Java, il y a quelques "décompilateur" dans la liste.

  7. #7
    Membre confirmé Avatar de fripette
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 242
    Par défaut
    ok merci de votre aide !

  8. #8
    Membre expérimenté
    Inscrit en
    Octobre 2007
    Messages
    311
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 311
    Par défaut
    Citation Envoyé par Napalm51 Voir le message
    Regarde quand même dans les logiciels Java, il y a quelques "décompilateur" dans la liste.
    En parlant de décompilateur, qu'en est-il de la légalité ? Ca doit être limite non ?

  9. #9
    Membre chevronné Avatar de Bezout
    Profil pro
    Développement
    Inscrit en
    Septembre 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Développement

    Informations forums :
    Inscription : Septembre 2003
    Messages : 234
    Par défaut
    Citation Envoyé par fripette Voir le message
    Merci beaucoup et désolée ma question était vraiment inutile comme tu dis.
    Puisque je vous ai sous la main et comme on est dans la série des questions inutiles, j'ai trouvé une .class qui m'intéresse sur un site internet et je voudrais lire ce que fait cette classe. Cependant, je n'arrive pas à l'afficher dans mon éditeur de texte ni dans eclipse.
    Dernière question après c'est promis je m'en vais !
    Merci Merci


    J'ai jamais dit que ta question était inutile. Je parlais de la méthode concat. Au pire on utilise l'opérateur +, au mieux un StringBuffer, StringBuilder, StrBuilder (commons-lang).

    Pour ton .class comme décompilateur tu as http://members.fortunecity.com/neshkov/dj.html qui est gratuit.

    Et sous Eclipse tu as le plugin JADClipse http://jadclipse.sourceforge.net/wik....php/Main_Page. Perso je suis pas fan mais bon.

Discussions similaires

  1. Méthode getSize() qui ne marche pas
    Par mush_H dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 20/03/2005, 01h29
  2. [SWING] KeyListener qui ne marche pas
    Par kindool dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2005, 19h04
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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