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

Collection et Stream Java Discussion :

Générer un tableau de bytes


Sujet :

Collection et Stream Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Générer un tableau de bytes
    Bonjour, je débute en java et on me demande dans un exercice de générer un tableau de bytes (dans une fonction qui retourne le tableau), j'ai tappé ceci dans mon programme, mais ca plante à l'exécution, quelqu'un pourrait il m aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public byte nextByte(){
    		Random generateur = new Random(System.currentTimeMillis());
    		byte tableau [] = new byte[1];
    		generateur.nextBytes(tableau);
    		System.out.println("byte : " + tableau[1]);
    		return tableau[1];
    	}//end nextByte

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    On risque pas de pouvoir t'aider si tu nous montres pas la partie qui plante. (Et puis, je vois pas en quoi ça avait l'air d'une bonne idée, de ne pas nous donner le message d'erreur.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 246
    Points
    246
    Par défaut
    salut,

    en java les tableaux sont indexés à partir de 0.

    Or dans ton code tu instancies un tableau de taille égale à 1.

    donc forcément quand tu essayes d'accéder à l'index 1, une exception est remontée.

    changes juste cette partie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("byte : " + tableau[0]);

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Super, ca fonctionne

    Merci

    Java me génère des bytes en -127 et 127, dans mon cas je souhaiterais générer entre 0 et 255

    Que dois je ajouter dans mon code ?

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ça, c'est plus compliqué.

    Un byte peut prendre 256 valeurs différentes, et en Java, ce sont les valeurs -128 à 127. Un byte en Java ne peut pas avoir de valeur supérieure à 127.

    Le plus simple est de régler ça à l'affichage, et d'afficher un int au lieu d'un byte. Cet int vaudra la même chose que le byte pour les valeurs 0 à 127. Et il vaudra de 128 à 255 pour les valeurs de byte de -128 à -1.

    Avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int monInt = monByte & 0xFF;
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    ok merci , je vais tester ca

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Dans une autre fonction de type byte, je dois générer des bytes entre 32 et 127, pour ensuite les afficher en char.

    Quel est la commande a ajouter pour l'obliger a rester entre 32 et 127 ?

    Merci pour l aide

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Un int de zéro à 127 - 32. Ensuite tu y ajoutes 32.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    En fait je dois créer plusieurs fonctions
    la premières doit générer un int entre -32768 et 32767

    public int nextInt(){
    Random generateur = new Random(System.currentTimeMillis());
    int valeur = -32768 + generateur.nextInt(65536);
    System.out.println("Int : " +valeur);
    return valeur;
    }//end nextInt

    La seconde doit générer des bytes entre 32 et 127, je me demande sil il n y a pas moyen de faire comme j'ai fait dans lafonction pour les int ? de lui mettre les butées hautes et basses

    public byte [] nextString2(){
    Random generateur = new Random(System.currentTimeMillis());
    int tailleTableau = generateur.nextInt(256);
    byte [] tableau = new byte[tailleTableau];
    generateur.nextBytes(tableau);
    for(int i=0; i<tailleTableau; i++){
    System.out.println("string : " + tableau[i]);
    }
    return tableau;
    }//end nextString2

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut tableau de bytes de nombres aléatoires de 32 à 127
    Salut,

    La méthode ci-dessous, qui n'est qu'un exemple parmi d'autres, permet de créer un tableau de bytes contenant aléatoirement les 96 valeurs possibles de 32 à 127 et ceci sans doublons:

    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
     
          public byte[] nombreAlea()
          {
             int min = 32;
             int max = 127;
     
             int nbreVal = ((max - min) +1); // sera la taille du tableau
             boolean encore = true;
             byte[] tab = new byte[nbreVal]; // est initialisé a 0 par défaut taille = 96 >> 32 à 127
     
          // Si on voulait des nombres de 0 à nnn (nnn = 1 à 127) valider les 2 lignes suivantes
             //for (int i = 0; i <nbreVal; i++) // on l'initialise a -1 sinon le num. éventuel 0 serait un doublon
             //tab[i] = -1;
     
             int i1 = 0;
             int i2 = 0;
     
             while(encore)
             {
                for (i1 = 0; i1 <nbreVal; i1++)
                {
                   encore = false; // sera forcé true si doublon
                   Random r = new Random();
                   int aI = min + r.nextInt(nbreVal); //trouvé
                   String aS = Integer.toString(aI);
                   byte aB = Byte.parseByte(aS);
     
                   for (i2 = 0; i2 <nbreVal; i2++)
                   {
                      if (aB == tab[i2])
                      {
                         encore = true;
                         System.out.println("Le nouveau nombre obtenu:\n" + aB
                            + " est un doublon, on ne le prend pas.(i2 = " + i2 + ")\n");
                         i1--;
                         break;
                      }
                   }
     
                   if (encore == false)
                      tab[i1] = aB;
                }
             }
     
             for (i1 = 0; i1 <nbreVal; i1++)
             {
                System.out.println("num. " + (i1 +1) + ": " + tab[i1]);
             }
             return tab;
          }
    Utilisation depuis l'appli utillisateur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
             LaClasseContenantLaMethode  trf = new LaClasseContenantLaMethode();
             byte[] tabAlea = trf.nombreAlea();
    Cordialement,

    Dan

Discussions similaires

  1. [Socket][File] Envoyer un tableau de byte
    Par itsmii dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 30/01/2014, 09h10
  2. Réponses: 1
    Dernier message: 09/05/2005, 14h19
  3. probleme d allocation avec un tableau de BYTE
    Par e1lauren dans le forum C++
    Réponses: 5
    Dernier message: 06/05/2005, 13h42
  4. [VB.NET] Tableau de bytes Lecture/Ecriture
    Par BenoitM dans le forum Windows Forms
    Réponses: 3
    Dernier message: 05/04/2005, 09h51
  5. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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