par Andy_D Lun 31 Jan - 0:05
Bon voila, je vous file le code source. Comme d'hab, on copie pas comme des charognards... Et si vous avez des remarques, dites les moi.
- Code:
package Theorie5;
/**
* <b>Classe Binary</b>
* <p>
* Une objet binary est un vecteur de taille 'n' contenant 'n' variables
* booléennes représentant l'état 1 ou 0
* </p>
*
* @author Andy
* @version 1.0
*/
public final class Binary{
/**
* Vecteur de variables booléennes
*/
public boolean[] vecteur;
/**
* Taille du vecteur
*/
public int tailleVecteur=0;
/*<b>Constructeurs</b>*/
/**
* Par défaut, le vecteur sera composé de 32 valeurs booléenes
* Mais il est possible de lui donner une taille.
*
*/
public Binary ()
{
vecteur = new boolean[32];
tailleVecteur=32;
remplissage();
}
/**
*
*@throws IllegalArgumentException Si jamais la taille entrée est <0.
*/
public Binary(int size) throws IllegalArgumentException
{
if(size<0)
throw new IllegalArgumentException("Le nombre de bits est négatif");
else
{
vecteur = new boolean[size];
tailleVecteur = size;
remplissage();
}
}
/*
* <b>Méthodes d'instances</b>
*/
/**
* Me permet de remplire par défaut le vecteur avec des "falses".
*/
public void remplissage() // permet de mettre toutes les valeurs a false (=0)
{
if(tailleVecteur>0)
{
for(int i=0; i<tailleVecteur; i++)
vecteur[i]=Boolean.FALSE;
}
}
/**
* <b>setVal(int n)</b>
* n indique la valeur entière positive à convertir en binaire avec comme
convention qu’un 1 binaire sera traduit en true et un 0 binaire en false dans le
vecteur de booléen.
* @param n
* @throws IllegalArgumentException
*/
public void setVal(int n) throws IllegalArgumentException
{
int max = maxValue();
if(n<0||n>max)
{
throw new IllegalArgumentException("La valeur doit être compris entre 0 et "+max);
}
else
{
char[] valBin = Integer.toBinaryString(n).toCharArray();
remplissage();
int incr =0;
for(int i=valBin.length-1; i>=0; i--)
{
boolean val= Boolean.FALSE;
if( valBin[i]=='1')
val = Boolean.TRUE;
vecteur[incr]=val;
incr++;
}
}
}
/**
* <b>maxValue()</b>
Cette méthode doit retourner la valeur maximale positive entière que le vecteur
est capable de mémoriser.
* @return
*/
public int maxValue()
{
int max =0;
if(tailleVecteur>0)
{
for(int i=0; i<tailleVecteur; i++)
{
max+=(int)Math.pow(2, i);
}
}
return max;
}
@Override
/**
* toString()
Cette méthode doit retourner un String qui contient la représentation de la
valeur binaire mémorisée dans le vecteur booléen.
*/
public String toString()
{
String retour="";
for(int i=tailleVecteur-1; i>=0; i--)
{
if(vecteur[i]==Boolean.TRUE)
retour+="1";
else retour+="0";
}
return retour;
}
/**
* <b>clearBit(int index)</b>
index indique la position du bit à annuler (valeur false dans le vecteur booléen).
Cette méthode doit lever un IllegalArgumentException avec le message suivant
« Indice incorrect» si index est <0 ou >la taille du vecteur booléen.
* @param index
* @throws IllegalArgumentException
*/
public void clearBit(int index) throws IllegalArgumentException
{
if(index<0 || index>tailleVecteur-1)
{
throw new IllegalArgumentException("Indice incorrect");
}
else
{
vecteur[index] = Boolean.FALSE;
}
}
/**
* <b>setBit(int index)</b>
index indique la position du bit à mettre à 1 (valeur true dans le vecteur
booléen).
Cette méthode doit lever un IllegalArgumentException avec le message suivant
« Indice incorrect» si index est <0 ou >la taille du vecteur booléen.
* @param index
* @throws IllegalArgumentException
*/
public void setBit(int index) throws IllegalArgumentException
{
if(index<0 || index>tailleVecteur-1)
{
throw new IllegalArgumentException("Indice incorrect");
}
else
{
vecteur[index] = Boolean.TRUE;
}
}
/**
* <b>isBit(int index)</b>
Retourne true ou false suivant la valeur du bit à tester.
Cette méthode doit lever un IllegalArgumentException avec le message
suivant « Indice incorrect» si index est <0 ou >la taille du vecteur booléen.
* @param index
* @return
* @throws IllegalArgumentException
*/
public boolean isBit(int index) throws IllegalArgumentException
{
boolean retour=Boolean.FALSE;
if(index<0 || index>tailleVecteur-1)
{
throw new IllegalArgumentException("Indice incorrect");
}
else
{
retour = vecteur[index];
}
return retour;
}
/**
* <b>cmpl1()</b>
Cette méthode doit retourner la référence d’un objet Binary qui contient le
complément à 1 binaire de l’objet sur lequel la méthode est appelée.
* @return
*/
public Binary cmpl1()
{
Binary cmpl= new Binary(tailleVecteur);
for(int i=0; i<tailleVecteur; i++)
{
if(vecteur[i])
{
cmpl.vecteur[i]=Boolean.FALSE;
}
else
{
cmpl.vecteur[i]=Boolean.TRUE;
}
}
return cmpl;
}
/**
* <b>getVal()</b>
Cette méthode doit retourner la valeur entière positive dont la représentation
binaire est mémorisée dans le vecteur booléen.
* @return
*/
public int getVal()
{
int retour=0;
for(int i=0; i<tailleVecteur; i++)
{
if(vecteur[i])
retour+=(int)Math.pow(2, i);
}
return retour;
}
/**
* <b>or( Binary mask)</b>
Cette méthode modifie l’objet sur lequel la méthode est appelée en effectuant
une opération or entre la valeur de l’objet et la valeur de mask.
* @param mask
*/
public void or(Binary mask)
{
int tailleMask = mask.tailleVecteur;
if(mask.tailleVecteur>=tailleVecteur)
tailleMask = tailleVecteur;
for(int i=0; i<tailleMask; i++)
{
if(mask.vecteur[i]==Boolean.TRUE) //Si le Mask[i]==false, le vecteur reste ce qu'il est, par contre, si vecteur[i]=0 et mask[i]=1 alors vecteur[i]=1 => je n'ai besoin que de regarder le mask !
vecteur[i]=true;
}
}
/**
* <b>and( Binary mask)</b>
Cette méthode modifie l’objet sur lequel la méthode est appelée en effectuant
une opération and entre la valeur de l’objet et la valeur de mask.
* @param mask
*/
public void and(Binary mask)
{
int tailleMask = mask.tailleVecteur;
if(mask.tailleVecteur>=tailleVecteur)
tailleMask = tailleVecteur;
for(int i=0; i<tailleVecteur; i++)
{
if(i<tailleMask)
{
if(vecteur[i]==true && mask.vecteur[i]==true)
vecteur[i]=true;
else vecteur[i]= false;
}
else
vecteur[i]=false;
}
}
}
PS : Joe et Julien, NON, le code n'a pas été plombé par une erreur a retrouver ^^
Allais it's time to
A demain
PS : Pour y voir plus claire, je vous conseil de soit : copier ce code dans netbeans (ou votre autre ide) ou alors dans notepad++, vous le copier dans un nouveau fichier et vous l'enregistrer avec l'extension .java. Il se mettra en couleur, ce qui est bcp plus lisible.