Aide en programmation orienté object

Fermé
bifaka - 23 avril 2006 à 00:08
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 - 26 avril 2006 à 13:32
salut à toi,
voici mon problème.je dois dans un premier temps, crér un classe.
- cette classe a un attribut privé qui est un tableau definit comme suit:
index du tableau 0 1 2 3 4 5
elements du tableau 0 1 1 0 0 0
les élements du tableau sont des chiffres binaires.
- ensuite, je dois définir deux méthodes set() et get()
la methode set() contient deux arguments : l'index du bit et une nouvelle valeur pour ce bit. elle doit retourner 0 pour Ok et -1 s'il ya erreur(si l' argument index est en dehors du tableau ou si la valeur du bit n'est pas 0 ou 1)
la methode get() affiche les element du tableau.
-un constructeur : le constructeur doit recevoir un passa d'argument qui donne la longueur souhaiter du tableau. Il doit créer un tableau qui ne contienne que des zeros.
Merci de bien voulior m'aider.
A voir également:

35 réponses

decay Messages postés 5 Date d'inscription samedi 22 avril 2006 Statut Membre Dernière intervention 23 avril 2006
23 avril 2006 à 00:16
ca sent un peu le "faites mes devoirs, je vous en serai reconnaissant"

Et il ya une antinomie que je détecte dans l'énoncé, le tableau fait 6 éléments, et le constructeur doit recevoir la taille du tableau? Il n'y a pas de taille maximum précisée?

Et pour afficher le contenu du tableau, c'est un affichage sur console texte ou graphique?

Mais je te donne au moins le début de la classe :

class CBinary
{
char bits[6];
public:
CBinary();
CBinary(int a_iTabLength);
int Set(char a_iBitIndex, char a_iNewBitValue);
void Get();
~CBinary();
}
0
merci, je te suis vraiment reconnaissante. C'est juste que j'ai passé 4h devant cet exercice sans savoir vraiment quoi faire.
oui le tableau fait 6 éléments, et le constructeur doit recevoir la taille du tableau. Non Il n'y a pas de taille maximum précisée

c'est un affichage sur console graphique car le tableau doit être de type short si tu essayes de commenter ce que t'as fait ca serait bien ou peut être completer ce j'ai fait..

Voici ce que j'ai essayé de faire mais ca ne donne rien:

import java.io.*;
class Registre

{

private short[] Bit={0,1,1,0,0,0};


public int setBit(int index; int valeur)
{
for ( i =0;i<Bit.length;i++)
{
if((index < Bit.length) ||(valeur=0||valeur=1) )
{

return 0;
}
else
return -1;
}

}

}


(
int i=0;
for ( i =0;i<Bit.length;i++)
{
System.out.print("|"+Bit[i]);
}


)

// constructeur
public Registre()
{

}

}
0
emmanuelP Messages postés 137 Date d'inscription vendredi 8 février 2002 Statut Contributeur Dernière intervention 7 mai 2006 161
23 avril 2006 à 17:14
Salut,

Il y a des méthodes plus "futées" (en utilisant par exemple la classe java.util.BitSet) mais compte tenu de tes imposés:
	
public class Registre {
	
        /**
	 * Longueur max du tableau
	 */
	private static final int MAX_ARRAY_LENGTH=6;

	/**
	 * Mon tableau
	 */
	private short[] myBitArray={0,1,1,0,0,0};
	

	/**
	 * Constructeur
	 * @param aBitArrayLength
	 */
	public Registre(int aBitArrayLength){

		if (aBitArrayLength<=MAX_ARRAY_LENGTH) {
			myBitArray=new short[aBitArrayLength];
			int index=0;

			while (index<aBitArrayLength) {
				myBitArray[index]=0;
				index++;
			}
		} else {
			System.out.println("Longueur demandee superieure a celle autorisee.");
		}

		
	}

	 /**
	  * Modifier la valeur d un bit
	  * @param position
	  * @param valeur
	  */
          public void set(int position, int valeur){
		
		if ( !((valeur==0)||(valeur==1)) ){
			System.out.println("la valeur "+valeur+" est incompatible avec le type bit.");
		}
		if ( (position<myBitArray.length) && (position>0) ){
			myBitArray[position]=(short) valeur;
		} else {
			System.out.println("La position "+position+" est en dehors du tableau.");
		}
	}

        /**
	 * Afficher le tableau
	 */
	public void get(){
		int index=0;
		
		while (index<myBitArray.length) {
			System.out.print(myBitArray[index]);
			if (index< (myBitArray.length-1) ){
				System.out.print("|");
			} else {
				System.out.println();
			}
			index++;
		}
	}
}



Good luck
0
Salut emmanuelP,
il se trouve que j'ai un autre problème. quand j'appelle la fonction get() dans la fonction main ca me donne cette erreur " void type not allowed here System.out.print(+ blax.get()); "
je suis débutante en java c'est pourquoi j'ai autant de difficultés.
Merci beaucoup pour ton aide. Peux tu me donner un lien où je peux avoir accès à ces metodes futées ou tout simplement tu me donnes un programme avec ces methodes pour que je puisse m'entrainer.


bonne soirée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonjour à tous,
ya t- il quelqu'un pour m'aider? quand j'appelle la methode get() dans la methode main() ca me donne cet erreur:

" void type not allowed here System.out.print(+ blax.get()); "

tout simplement parcque la methode get() ne retourne rien et n'a pas de passage d'argument. Ca doit seulement afficher les element sdu tableau. Qui peut me dire comment je dois faire pour trouver une solution à ca?afin de pouvoir afficher les élements du tableau. Je serai reconnaissante pour chaque aide. En plus, je dois aussi deplacer les elements du tablau à gauche et à droite. Là aussi, je ne sais pas comment ca se passe.
Merci d'avance.
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
24 avril 2006 à 10:28
salut

et avec ça ??

System.out.print("" + myBitArray[index]);
0
merci Chouba,
ca marche. je me suis redu compte en appelant la methode get() dans la methode main() comme ca
blax.get()
ca marche aussi.
grand merci les gars.
j'ai un autre probleme

je dois aussi deplacer les elements du tablau à gauche et à droite. c.à. d je dois créer une autre classe dans laquelle je deplace tous les elemets du tableau à une position à gauche respectivement à droite. le dernier element qui sort du tableau doit être effacer.
comment ca se passe je n'ai jamais fait ca.
Merci pour toute aide
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
24 avril 2006 à 12:14
salut

si je comprends bien ... les données de ton tableau de longueur 6 doivent se retrouver dans un tableau de longueur 5 ...


donc en schématisant ça donne

tableau1[0][1][2][3][4][5]

tableau2 [4][3][2][1][0]

le [5] étant supprimé

donc en fait, tu dois faire une méthode qui itére ton tableau, en retire les données et les insére dans le tableau 2 en partant de la fin ..


int index2 = 4;

for (int i = 0; i<5;i++){

      

      short tempo = tableau1[i];
      tableau2[index2] = tempo;
      index2 = index2--

             
}




0
c'est pas exactement ca.
les deux tableaux doivent avoir la même longueur. L e truc c'est que j'ai deux methodes
la methode1 fait ceci
tableau1 [0][1][2][3][4][5] j'ajoute un element dans le tableau 1 à la gauche qui me donne le tableau2 comme ca

tableau2 [6][0][1][2][3]][4] le 5 je le retourne à la fonction
Return([5])

la methode2 fait cela
tableau1 [0][1][2][3][4][5] j'ajoute un element dans le tableau 1 à las droite qui me donne le tableau2 comme ca

tableau2 [1][2][3]][4] [5][6] le 0 je le retourne à la fonction
Return([0])
merci pour ton aide choubaka
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
24 avril 2006 à 14:07
ok


pour la méthode 1

public short methode1(){

int index2 = 0;

tableau2[index2] = 6;

for (int i = 0; i == tableau1.lenght() ;i++){

      
      index2 = i + 1
      short tempo = tableau1[i];
      tableau2[index2] = tempo;
      
        }

       return tableau1[5];
             
}



pour la méthode 2

public short methode2(){

        short tempo = tableau1[0];
        tableau2[6]  = 6;

for (int i = 1 ; i < tableau.lenght ; i ++){

      tableau2[i -1] = tableau1[i];


       }

    return tempo;
        

}

0
merci pour ton aide choubaka c'est vraiment énorme et je te suis reconnaissante.
Au fait mon programme actuel ressemble à ca. mais je dois l'élargir
en créant une sous calsse de la registre. celle doit hériter du constructeur de la classe mère et en plus de ca, elle doit avoir comme argument un tableau qui contient les valeurs initiales du registre. Elle doit aussi vérifier que toutes cettes valeurs sont 0 ou 1si c'est le cas, il doit écrire ces valeurs dans un deuxieme tableau comme valeurs initiale et si ce n'est pas le cas, il doit initialiser le tableau zéro. Ensuite je dois créer deux méthodes dans ma sous classe (classe fille) qui fait ceci la methode1 fait ceci
tableau1 [0][1][2][3][4][5] j'ajoute un element dans le tableau 1 à la gauche qui me donne le tableau2 comme ca

tableau2 [6][0][1][2][3]][4] le 5 je le retourne à la fonction
Return([5])

la methode2 fait cela
tableau1 [0][1][2][3][4][5] j'ajoute un element dans le tableau 1 à las droite qui me donne le tableau2 comme ca

tableau2 [1][2][3]][4] [5][6] le 0 je le retourne à la fonction
Return([0])
dans la methode main, je dois créer un objet de la classe fille qui est un tableau de longueur 6 et qui est ainsi initialiser: 010101.
demander `l'utilisateur quel bit du registre il veut déplacer et de quel côté ensuite exécuter l'opération et afficher les bit qui ont été déplacer.
Je suis très reconnaissante pour toute aide. corriger mon programme et completer le si necessaire car ca ne fonctionne pas.

J'AI BESOIN D'aiDE . C'est URGENT. MERCI POUR TOUT AIDE

public class Registre {

/**
* Longueur max du tableau
*/
private static final int MAX_ARRAY_LENGTH=6;

/**
* Mon tableau
*/
private short[] myBitArray={0,1,1,0,0,0};


/**
* Constructeur
* @param aBitArrayLength
*/
public Registre(int aBitArrayLength){

if (aBitArrayLength<=MAX_ARRAY_LENGTH) {
myBitArray=new short[aBitArrayLength];
int index=0;

while (index<aBitArrayLength) {
myBitArray[index]=0;
index++;
}
} else {
System.out.println("Longueur demandee superieure a celle autorisee.");
}


}

/**
* Modifier la valeur d un bit
* @param position
* @param valeur
*/
public void set(int position, int valeur){

if ( !((valeur==0)||(valeur==1)) ){
System.out.println("la valeur "+valeur+" est incompatible avec le type bit.");
}
if ( (position<myBitArray.length) && (position>0) ){
myBitArray[position]=(short) valeur;
} else {
System.out.println("La position "+position+" est en dehors du tableau.");
}
}

/**
* Afficher le tableau
*/
public void get(){
int index=0;

while (index<myBitArray.length) {
System.out.print(myBitArray[index]);
if (index< (myBitArray.length-1) ){
System.out.print("|");
} else {
System.out.println();
}
index++;
}
}
}

/** à partir d'ici corriger et à copleter s#il vous plait**/


deplaceRegistre(short aBitArrayLength,short[] myBitArray1)
{
super (aBitArrayLength);
myBitArray1=new short[aBitArrayLength];
myBitArray2=new short[aBitArrayLength];

short index;
for(index=0;index<aBitArrayLength; index ++)
{
if (((myBitArray1[index]==0)||(myBitArray1[index]==1)))
{
myBitArray2[index]=myBitArray1[index];
}
else
{
myBitArray2[index]=0;
}
}

}/* Fin constructeur*/

public short déplace_gd(short position,short wert, short temp)
{
super.set( position,wert);
if ( !((wert==0)||(wert==1)) )
{
System.out.println("la valeur du bit "+wert+" n'est ni 0 ni 1.");
return(-1);
}
else{

for (short i = 0; i <=myBitArray1.length ;i++)
{
position =i+1;
temp = myBitArray1[i];
myBitArray2[ position] = tempo;

}
}


return (myBitArray2[myBitArray1.length-1]);


}




public short déplace_dg(short position,short wert, short temp)
{
super.set( position,wert);
if ( !((wert==0)||(wert==1)) )
{
System.out.println("la valeur du bit "+wert+" n'est ni 0 ni 1.");
return(-1);
}
else{

for (short i = 0; i <=myBitArray1.length ;i++)
{
myBitArray2[i -1] = myBitArray1[i]

temp = myBitArray1[0];
myBitArray2[myBitArray2.length] = myBitArray2.length ;



}
}


return (myBitArray2[myBitArray1.length-1]);


}



}/*fin Class*/

/*
*Methode Main
*/
class GereRegistre
{
public static void main(String args[]) throws IOException
{

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

/*
*crée un Ojet

*/

deplaceRegistre bit={0,1,0,1,0,1,0,1}; //il ya là une erreur du compilateur




short[]d=new short[6];


/*
*Initialiaser
*l' Objet
*/

bit= new deplaceRegistre(i,d);




}//fin main
}//fin programme
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 09:04
salut

déjà un petit problème ici ..

deplaceRegistre(short aBitArrayLength,short[] myBitArray1) 
{ 
super (aBitArrayLength); 
myBitArray1=new short[aBitArrayLength]; 
myBitArray2=new short[aBitArrayLength]; 


tu reçois en argument "myBitArray1" qui est à priori déjà rempli ...

dans la ligne soulignée, tu l'écrase en réinitialisant le tableau qui de ce fait devient vide ...
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 09:13
deuxième petit problème

public short déplace_gd(short position,short wert, short temp) 
{ 
super.set( position,wert); 
if ( !((wert==0)||(wert==1)) ) 
{ 
System.out.println("la valeur du bit "+wert+" n'est ni 0 ni 1."); 
return(-1); 
} 
else{ 

for (short i = 0; i <=myBitArray1.length ;i++) 
{ 
position =i+1; 
temp = myBitArray1[i]; 
myBitArray2[ position] = tempo; 


il vient d'où ce tempo ???
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 09:29
//deplaceRegistre bit={0,1,0,1,0,1,0,1}; //il ya là une erreur du compilateur // c'est normal bit n'existe pas

short[] d== new short[6];

Registre bit = new Registre(i,d); // ça c'est l'instanciation de ta classe. mais je ne sais pas où tu vas chercher ton "i"

d=={0,1,0,1,0,1,0,1}; 
bit.deplaceRegistre(6,d);



/* 
*Initialiaser 
*l' Objet 
*/ 






}//fin main 
0
Au fait je dois travailler avec deux tableaux mais on me demande de passer seulement un tableau au contructeur . Comment faire pour initialiser le deuxieme tableau? où dois je le déclarer? tempo est une erreur de frappe. jevoulais écrire temp. Je ne savais pas qu'on pouvais mettre directement des chiffres c'est pourquoi j'ai mis i. Alors c'est juste l'opération que j#ai faite dans les deux méthodes?
merci pour ton aide mon grand.
0
quan j'essaye de compiler ca , ca me donne ces trois erreurs

- illegal start of expression

d=={0,1,0,1,0,1,0,1};

^


cannot resolve symbol

symbol : constructor Registre(int,short[])

location: class Registre

Registre bit = new Registre(6,d);


^
et puis j'ai mis d= d=={0,1,0,1,0,1,0,1};
ca me donne la même erreur
illegal start of expression
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 10:26
il est possible que ce que tu veux rentrer dans ton tableau est trop grand ..

je vois 8 entrées, alors que tu dois avoir maximum 6 entrées...

private short[6] d = {0,1,0,1,0,1};

ça marche ça ??

sorry, je n'ai pas de compilateur pour vérifier, je fais ça de mémoire seulement...
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 10:39
pour le constructeur, je viens de vérifier, tu n'as pas de constructeur de la classe registe qui accépte un tableau ... uniquement un int qui détermine la longueur du tableau ..

rien ne t'empêche de créer un deuxième constructeur qui prends alors deux arguments ou seulement ton tableau ..

public Registre ( short[] monTableau);


il sera certainement utile d'avoir alors deux tableaux dans tes attributs de la classe Registre.. De cette manière, lorsque tu fais appel à un des constructeur, on initialise le tableau1 par exemple et lorsque tu fais appel à une méthode pour le deuxième ..


Maintenant, je remaque dans ta méthode deplaceRegistre, tu fais appel à un constructeur super(int ....), je vois pas à quelle superclasse tu fais appel...

Si tu dois créer une sous classe de registre, alors là d'accord mais je ne vois nulle part dans ton code cette fameuse sous classe..

public Class PetitRegistre extends Registre {
 ...........

}


ceci est une sous classe de registre, qui hérite des attributs et des méthodes de Registre...
0
oui c amarche mais sans private. je fais comment pour mes tableaux? et les methodes c'est bien fait?
0
choubaka Messages postés 39376 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 29 avril 2024 2 101
25 avril 2006 à 11:01
si tu dois travailler avec deux tableau, rien ne t'empêche de les initialiser tous les deux dans ton constructeur ..

le premier sera initialisé à partir des donées fournies par l'argument, l'autre par défaut...


0