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

Entrée/Sortie Java Discussion :

Lire des lettres aléatoirement à partir d'un fichier .txt


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 24
    Points
    24
    Par défaut Lire des lettres aléatoirement à partir d'un fichier .txt
    salut ,
    j'essaye d'écrire une classe java qui me permettrait de selectionner une valeur aléatoire en prenant compte de son poids à partir d'un fichier .txt.

    Je m'explique :
    J'ai dans un fichier texte :
    lettre1 10
    lettres2 20
    lettres3 40
    ...
    (10,20,40,... sont des poids)
    En suivant les poids des lettres(1,2,3,..), la lettre1 devrait sortir plus fréquemment que la lettre3 qu'elle même sortira plus fréquement que la lettre2.
    Qq'un aurait une idée sur comment je peux tirer les lettres aléatoirement à partir de ce fichier texte ?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 39
    Points : 51
    Points
    51
    Par défaut
    Lu,

    Petite idée:

    1) tu va chercher la lettre
    2) tu crée une variable java (String ou char[])
    3) tu place ta lettre le nombre de fois correspondant a ton poids
    4) meme chose avec la lettre suivante

    ex:
    dans ton fichier:

    A 3
    B 4

    String listeDeLettre = "AAABBBB"
    ou
    char[] = {A,A,A,B,B,B,B}

    Apres pour la partie aléatoire, y a une fois rand (ou random) qui donne un nombre aléatoire entre 0 et 1. T'as plus qu'a le multiplier par la longueur de ton tableau ou String et récupérer la lettre correspondante.

    Y a ptete plus simple ceci dit.

    J'espère que ca t'aidera.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Moins couteux dans le tableau au lieu de répéter X fois les lettres, tu stockes le range de chaque lettre.

  4. #4
    Membre éprouvé

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Points : 900
    Points
    900
    Par défaut
    Encore plus simple (mais en fait voisin de la première solution proposée):

    Tu charges simplement ton fichier dans une String, et tu prends une lettre au hasard à l'intérieur. Celles qui sont le plus présentes auront naturellement plus de chance d'être sélectionnées suivant leur poids. Algorithmiquement parlant tu peux pas faire moins couteux. Bon par contre effectivement ça sera plus couteux en mémoire que de commencer par repérer la fréquence de chaque lettre. Donc ça dépend:

    • Si tu utilises toujours le même fichier, ça vaut le coup de faire une analyse des fréquences, pour économiser en mémoire et avoir de meilleures performances sur le long terme.
    • A l'inverse, si le fichier change sans cesse, là il vaut mieux aller vers la simplicité. L'analyse des fréquences devient moins utile s'il faut toujours la refaire


    Bon je sais que normalement on ne donne pas de solutions, mais je n'ai pas résisté à l'envie de tester, donc voici un exemple d'implémentation de la solution sans analyse des fréquences:

    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
    package filewheight;
     
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.util.Random;
     
    public class FileWheight {
     
    	public static String loadFile(String filename){
    		BufferedReader br = null;
    		StringBuilder sb = new StringBuilder();
     
    		try {
    			br = new BufferedReader(new FileReader(filename));
    			for(String line = br.readLine();line!=null;line = br.readLine())
    				sb.append(line);
     
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (br!=null) {
    					br.close();
    				}
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    		return sb.toString();
    	}
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		String fileContent = loadFile("test.txt");
    		if(fileContent.length()==0){
    			System.out.println("fichier vide");
    			return;
    		}
    		Random r = new Random();
    		int index = r.nextInt(fileContent.length());
    		System.out.println(fileContent.charAt(index));
    	}
     
    }
    Tu noteras la gestion des exceptions en finesse pour garantir une bonne fermeture des flux quoi qu'il arrive

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2011
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 29
    Points : 24
    Points
    24
    Par défaut
    Merci bien pour vos réponses , ils m'aident beaucoup.

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

Discussions similaires

  1. Lire des données a partir d'un fichier Excel
    Par manouil dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 11/04/2014, 13h03
  2. Insérer des données a partir d'un fichier txt.
    Par AUZUR dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/01/2010, 15h05
  3. Récupérer des données formattées à partir d'un fichier txt
    Par MANNATHEKING dans le forum Documents
    Réponses: 2
    Dernier message: 14/01/2010, 11h40
  4. Lire des données a partir d'un fichier txt
    Par walido dans le forum C#
    Réponses: 13
    Dernier message: 30/05/2007, 13h22
  5. creer des decors a partir d'un fichier
    Par NICKO dans le forum DirectX
    Réponses: 2
    Dernier message: 21/09/2002, 09h34

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