cs_essira
Messages postés2Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention28 mai 2007
-
28 mai 2007 à 19:31
cs_essira
Messages postés2Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention28 mai 2007
-
28 mai 2007 à 21:14
Bonjour,
j'ai un programme qui lit un fichier texte ligne par ligne. A partir d'une certaine indication, il sépare les lignes en 15 string différentes ( 15 gènes ) en utilisant une arrayList.
Le problème provient du fait que je dois remplacer un gène au hasard par des "?" pour une seule ligne, qu'elle choisi aussi aléatoirement. Dans le programme suivant, cela fonctionne, mais efface par la suite le meme gène pour toutes les lignes suivantes jusqu'à la fin.
String name = "";
String base = "";
Random generator = new Random();
int delRow = 0;//choisi dans quelle ligne deleter le gene ( la rangee)
int delCol;//choisi quel gene de 1 a 15 a deleter ( la colonne)
String manquante = "?";
delCol = generator.nextInt( 14);
delRow = 20+generator.nextInt( 39);
do{
//RETIRE LA PREMIERE PARTIE DE LA LIGNE (NAME)_ PAS IMPORTANT
String line1 = content[i];
StringTokenizer tok = new StringTokenizer(line1);
name = tok.nextToken().trim();
base = "";
if(tok.hasMoreTokens())
base = tok.nextToken();
i++;
if ( i == delRow){//si la ligne i correspond a delRow, on efface le gene dans cette ligne ET POURQUOI LES SUIVANTES???
geneDel = gene.get(delCol); //retourne le gene delCol
int geneSize = geneDel.length(); //retourne la longueur du delCol
for( int b = 0; b <= geneSize -1; b++) //tant qu'on a pas atteint la longueur
manquante = (manquante +'?'); //on ajoute un ?
gene.set(delCol, manquante);
}
//NE FONCTIONNE PAS, EFFACE LE GENE DANS LES LIGNES SUIVANT LE delRow
if(i != delRow){
//ECRIT DANS UN FICHIER TEXTE
out.write(name + " " + toString()+ "\n" );
//DEFINI LA SECTION DU FICHIER TEXTE D'ENTREE QU'ON VEUT DIVISER EN GENES
while((content[i].startsWith("Taxon"))&&!(content[i].trim()).equals(";")&&!(content[i].trim()).equals("END;"));{
if(content[i].trim()!="\n"){
base = base + content[i];
i++;
}
}
Comment faire pour que seul le gène de la ligne désirée soit effacée, et non pas à toute les lignes suivantes?
ltb69
Messages postés5Date d'inscriptionsamedi 7 octobre 2006StatutMembreDernière intervention16 mars 2009 28 mai 2007 à 21:01
Evite le new String(String). Ca ne sert a rien (String est imutable) et ca complique vachement la lecture.
Autre remarque, sur la beaute du code ( :)) :
tu fais un :
base = "";
if(tok.hasMoreTokens())
base = tok.nextToken();
i++;
gene.add(new String (base.substring(0,204))); ...
Cela fonctionne surement avec ton fichier, mais ce n'est pas robuste. Si tu n'as plus de tokens (hasMoreTokens() vaut false), base vaut chaine vide, et le substring plante.
Il faut toujours ecrire du code le plus robuste possible (on dirait un prof qui parle :)))
cs_essira
Messages postés2Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention28 mai 2007 28 mai 2007 à 21:14
Bonjour!
merci pour vos réponses! J'ai malheureusement essayé le else if et toutes les boucles possibles et inimaginables avec toujours le même résultats.
Pour itb69, je prends tes commentaires en note. Je n'ai mis qu'une petite partie de mon programme, et je tente pour l'instant de régler mon problème de boucle avant tout, la finition et généralisation ira après. Merci, je m'en occuperai rendu-là.