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

Java Discussion :

Générer matrice de binaires


Sujet :

Java

  1. #21
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Slt, encore une fois, c'est encore moi .
    Je ne sais pas ce que vous y pensez, mais je trouve quelle n'est pas si longue que ça ma méthode, tu devrais juste éviter la conversion char [] -> byte [], et faire une conversion directe char [] -> int [], une simple affectation pour chaque élément du tableau suffira (int coder sur 4 octect, char sur 2 octet).
    Donc :
    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
    String s = "Java";
    char [] tab = s.toCharArray ();
    int i = tab [0];
            if ((i & 0x00000001) > 0)
                System.out.println ("1");
            else
                System.out.println ("0");
            if ((i & 0x00000002) > 0)
                System.out.println ("1");
            else
                System.out.println ("0");
            if ((i & 0x00000004) > 0)
                System.out.println ("1");
            else
                System.out.println ("0");
            ...
    Ici, a partir d'un int (32 bits = 4 octects), on fait a chaque fois un et logique, on met 1 a la position du bit quand veut tester, et un zéro ailleurs. Si la valeur obtenue est > 0, le bit a cette position est a 1, sinon, il est a zéro.
    0x00000004 : en hexadécimal.
    PS : je m'excuse pour la dernière fois, j’étais impeut pressé, je l'ais fait a la va vite, j'ai fais du n'importe quoi
    Bon courage

  2. #22
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    ... Ca reste bien plus long qu'un simple Integer.toBinaryString() ...

    A la limite il y aurait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int bit = 0; bit < 8; bit++) {
      if(((i >> bit) & 1) != 0) {
        System.out.println ("1");
      } else {
        System.out.println ("0");
      }
    }
    qui est passablement plus court.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #23
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2011
    Messages : 181
    Billets dans le blog
    1
    Par défaut
    Je m’excuse pour le retard , j’étais occupé.
    En terme de code (code source, exécutable généré), oui c'est long, mais en terme de temps d’exécution, c'est plus rapide.
    Citation Envoyé par thelvin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(int bit = 0; bit < 8; bit++) {
      if(((i >> bit) & 1) != 0) {
        System.out.println ("1");
      } else {
        System.out.println ("0");
      }
    }
    Ici tu utilise une boucle avec un compteur, incrémentation et test a chaque fois->traitement en plus.
    mais vu :
    Citation Envoyé par proc02
    je voudrais savoir s'il une autre approche pour faire court le code
    Je pense que tu as raison.
    En tous cas, bon courage

  4. #24
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par mohamine1989 Voir le message
    En terme de code (code source, exécutable généré), oui c'est long, mais en terme de temps d’exécution, c'est plus rapide.
    Non, car il y a un appel à System.out.println() pour chaque caractère.
    Chacun de ces appels prend infiniment plus de temps que ce qu'on gagne en évitant un compteur. Cette micro-optimisation ne se justifie donc pas.

    (Et si ce n'était pas un println(), ce serait une affectation dans un char[], ce qui est plus rapide, mais reste infiniment supérieur au temps gagné par la micro-optimisation. D'ailleurs le compteur avec incrémentation deviendrait inévitable.)

    De manière générale, il est très rare qu'on puisse réellement optimiser quelque chose avec un code plus compliqué. La JVM est trop maline pour ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #25
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Si c'est bien ce que tu veux, je t'ai concocter un code qui donne ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    H: [1, 0, 0, 1, 0, 0, 0, 0]
    E: [1, 0, 0, 0, 1, 0, 1, 1]
    L: [1, 0, 0, 1, 1, 0, 0, 1]
    L: [1, 0, 0, 1, 1, 0, 0, 1]
    O: [1, 0, 0, 1, 1, 1, 1, 1]
    W: [1, 0, 1, 0, 1, 1, 1, 1]
    O: [1, 0, 0, 1, 1, 1, 1, 1]
    R: [1, 0, 1, 0, 0, 1, 0, 1]
    L: [1, 0, 0, 1, 1, 0, 0, 1]
    D: [1, 0, 0, 0, 1, 0, 0, 0]
    +: [0, 0, 0, 0, 0, 0, 0, 0]
    Le voici
    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
    60
    61
    import java.util.Arrays;
     
    import javax.naming.BinaryRefAddr;
     
     
    public class MAT {
     
    	public static String toBinaryRow(char c) {
     
    		String s= Integer.toBinaryString(c);
    		int n= Integer.bitCount(c);
     
    		if (n % 2 == 0)
    			return s+"0";
    		else
        		return s+"1";
        }
     
    	public static char toBinaryCol(String s) {
     
    		int a= Integer.parseInt(s, 2);   //convertir la chaine de binaire en entier
    		int n= Integer.bitCount(a);     // compter le nombre de 1 contenu dans le binaire de l'entier
     
    		if (n % 2 == 0)
    			return '0';
    		else
        		return '1';
        }
     
        public static void main(String[] args) {
     
        	String maChaine= "HELLOWORLD";
        	int nbRow= maChaine.length() + 1;
        	int nbCol= 8;
        	char[][] mat= new char[nbRow][nbCol];
        	String s;
        	char c;
     
        	for(int i=0; i<nbRow-1; i++) {  //traiter chaque caractère de la chaine maChaine
        		c= maChaine.charAt(i);
        		s= toBinaryRow(c);
        		mat[i]= s.toCharArray();
        	}
     
        	StringBuilder binary;
     
        	for(int j=0; j<nbCol; j++) {  //traiter chaque colonne de mat
        		binary= new StringBuilder();
     
        		for(int i=0; i<nbRow-1; i++)
        			binary.append(mat[i][j]); //concaténation des cases pour la colonne traitée
     
        		String str= ""+binary; 
        		mat[nbRow-1][j]= toBinaryCol(str);		
        	}
     
        	for(int i=0; i<nbRow-1; i++)  
        		System.out.println(maChaine.charAt(i)+": "+Arrays.toString(mat[i]));
        	System.out.println("+: "+Arrays.toString(mat[nbRow-1]));
        }
    }
    Il est commenté. J'espère que ça te conviendra
    Et oui encore moi
    Je desire exécuter cette action sur une phrase si cela est possible avec cette methode comment dois je m'y prendre.
    Merci

  6. #26
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bonsoir

    Dis moi tu veux faire ça pour chaque mot de la phrase, ou une seule matrice pour la phrase en entier ?

  7. #27
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Bonsoir

    Dis moi tu veux faire ça pour chaque mot de la phrase, ou une seule matrice pour la phrase en entier ?
    je voudrais faire cela pour chaque mot de la phrase mais la deuxième idée serait la bienvenue
    Merci

  8. #28
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Ceci te permet de récupérer chaque mot de ta phrase dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String phrase= "je suis une phrase toute jolie";
    String[] decoupe= phrase.split(" ");
    après tu n'a plus qu'a appliquer la procédure sur chaque mot comme ceci
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    import java.util.ArrayList;
    import java.util.Arrays;
     
     
    public class MAT {
     
    	public static String toBinaryRow(char c) {
     
    		String s= Integer.toBinaryString(c);
    		int n= Integer.bitCount(c);
     
    		if (n % 2 == 0)
    			return s+"0";
    		else
        		return s+"1";
        }
     
    	public static char toBinaryCol(String s) {
     
    		int a= Integer.parseInt(s, 2);   //convertir la chaine de binaire en entier
    		int n= Integer.bitCount(a);     // compter le nombre de 1 contenu dans le binaire de l'entier
     
    		if (n % 2 == 0)
    			return '0';
    		else
        		return '1';
        }
     
    	public static char[][] traitement(String maChaine) {
     
    		int nbRow= maChaine.length() + 1;
        	int nbCol= 8;
        	char[][] mat= new char[nbRow][nbCol];
        	String s;
        	char c;
     
        	for(int i=0; i<nbRow-1; i++) {  //traiter chaque caractère de la chaine maChaine
        		c= maChaine.charAt(i);
        		s= toBinaryRow(c);
        		mat[i]= s.toCharArray();
        	}
     
        	StringBuilder binary;
     
        	for(int j=0; j<nbCol; j++) {  //traiter chaque colonne de mat
        		binary= new StringBuilder();
     
        		for(int i=0; i<nbRow-1; i++)
        			binary.append(mat[i][j]); //concaténation des cases pour la colonne traitée
     
        		String str= ""+binary; 
        		mat[nbRow-1][j]= toBinaryCol(str);		
        	}
     
        	for(int i=0; i<nbRow-1; i++)  
        		System.out.println(maChaine.charAt(i)+": "+Arrays.toString(mat[i]));
        	System.out.println("+: "+Arrays.toString(mat[nbRow-1]));
     
    		return mat;
    	}
     
        public static void main(String[] args) {
     
        	String phrase= "je suis une phrase toute jolie";
        	String[] decoupe= phrase.split(" ");
        	ArrayList<char[][]> listMat= new ArrayList<char[][]>();
     
        	for(String maChaine: decoupe)
        		listMat.add(traitement(maChaine));
        }
    }
    pour l'autre possibilité, j'y réfléchis là je voulais d'abord te répondre pour la première

  9. #29
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Dans le cas d'une seule matrice pour toute la phrase, quel traitement tu veux faire pour les espaces ?

  10. #30
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Dans le cas d'une seule matrice pour toute la phrase, quel traitement tu veux faire pour les espaces ?
    Oui les espaces

  11. #31
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    tu veux t'en débarasser ? Mettre des 0 par défaut ? ou les convertir ?

  12. #32
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Ceci te permet de récupérer chaque mot de ta phrase dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String phrase= "je suis une phrase toute jolie";
    String[] decoupe= phrase.split(" ");
    après tu n'a plus qu'a appliquer la procédure sur chaque mot comme ceci
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    import java.util.ArrayList;
    import java.util.Arrays;
     
     
    public class MAT {
     
    	public static String toBinaryRow(char c) {
     
    		String s= Integer.toBinaryString(c);
    		int n= Integer.bitCount(c);
     
    		if (n % 2 == 0)
    			return s+"0";
    		else
        		return s+"1";
        }
     
    	public static char toBinaryCol(String s) {
     
    		int a= Integer.parseInt(s, 2);   //convertir la chaine de binaire en entier
    		int n= Integer.bitCount(a);     // compter le nombre de 1 contenu dans le binaire de l'entier
     
    		if (n % 2 == 0)
    			return '0';
    		else
        		return '1';
        }
     
    	public static char[][] traitement(String maChaine) {
     
    		int nbRow= maChaine.length() + 1;
        	int nbCol= 8;
        	char[][] mat= new char[nbRow][nbCol];
        	String s;
        	char c;
     
        	for(int i=0; i<nbRow-1; i++) {  //traiter chaque caractère de la chaine maChaine
        		c= maChaine.charAt(i);
        		s= toBinaryRow(c);
        		mat[i]= s.toCharArray();
        	}
     
        	StringBuilder binary;
     
        	for(int j=0; j<nbCol; j++) {  //traiter chaque colonne de mat
        		binary= new StringBuilder();
     
        		for(int i=0; i<nbRow-1; i++)
        			binary.append(mat[i][j]); //concaténation des cases pour la colonne traitée
     
        		String str= ""+binary; 
        		mat[nbRow-1][j]= toBinaryCol(str);		
        	}
     
        	for(int i=0; i<nbRow-1; i++)  
        		System.out.println(maChaine.charAt(i)+": "+Arrays.toString(mat[i]));
        	System.out.println("+: "+Arrays.toString(mat[nbRow-1]));
     
    		return mat;
    	}
     
        public static void main(String[] args) {
     
        	String phrase= "je suis une phrase toute jolie";
        	String[] decoupe= phrase.split(" ");
        	ArrayList<char[][]> listMat= new ArrayList<char[][]>();
     
        	for(String maChaine: decoupe)
        		listMat.add(traitement(maChaine));
        }
    }
    pour l'autre possibilité, j'y réfléchis là je voulais d'abord te répondre pour la première
    Ceci fait mon affaire

  13. #33
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    tu veux t'en débarasser ? Mettre des 0 par défaut ? ou les convertir ?
    M'en débarasser totalement

  14. #34
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bein alors c'est déja fait car ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<char[][]> listMat= new ArrayList<char[][]>();
    est la liste des matrices de tes mots et sans aucun espace à laquelle tu accède comme ça par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char t= listMat.get(0)[4][4];
    a moins que tu ne préfères une autre structure ?

  15. #35
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Bein alors c'est déja fait car ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<char[][]> listMat= new ArrayList<char[][]>();
    est la liste des matrices de tes mots et sans aucun espace à laquelle tu accède comme ça par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char t= listMat.get(0)[4][4];
    a moins que tu ne préfères une autre structure ?

    Merci a+

  16. #36
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Mai 2012
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Mai 2012
    Messages : 120
    Par défaut
    Citation Envoyé par Laine Voir le message
    Salut tout le monde
    je serai un peu gourmand j'ai un autre souci d'un autre niveau en effet je desire transmettre chaque ligne de la matrice générer à un serveur UDP ,bien sur le client utlise aussi UDP comment je peut m'y prendre pour transmettre les lignes.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Générer des fichiers binaires
    Par scolyo dans le forum Langage
    Réponses: 4
    Dernier message: 04/11/2010, 09h10
  2. Générer un vecteur binaire 8bits aléatoire
    Par mirva dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/12/2008, 16h47
  3. Générer des séquences binaires
    Par Contrec dans le forum C#
    Réponses: 16
    Dernier message: 03/12/2008, 15h46
  4. générer un fichier binaire OCTET par OCTET
    Par Septembre84 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 20/03/2008, 16h07

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