Methode

Résolu
meryem -  
 meryem -
Bonjour,

j ai etudié .Net et j voulais travailler un tp en java j 'ai fait cette méthode en c# et je veux la transformer en java mais j'ai pas su comment :
Methode ajouerParticipants , NewClass c 'est une classe mère , matricule c'est son attribut .. bref je veux juste savoir comment on fait cela en java , et surtout pour foreach , car on m donne erreur ..

public void AjouterParticipant(NewClass ex)
{
LIsteDev.add(ex.matricule, ex);
}

public float CalculeSalairetousparticipants()
{

float sum = 0;
foreach (NewClass e in LIsteDev.Values)
{
sum = sum + e.Calcul_salaire(e.Nbh);
}
return sum;

}
un petit help .merci ^^

1 réponse

bizu53 Messages postés 1274 Date d'inscription   Statut Membre Dernière intervention   861
 
Je n'ai pas bien tout compris de ton problème mais en tout cas le mot-clef foreach n'existe pas en Java.
En Java la boucle foreach utilise le mot-clef for.
La moindre recherche sur Google donne des résultats sur ça...
Mais pour faire court : for (final Truc o : objects) { ... }
- objects doit implémenter l'interface java.lang.Iterable (ce qui est le cas de beaucoup (si pas toutes) les Collections comme les List).
- chaque élément o de objects doit être un Truc (au sens large, ou une sous-classe de Truc).
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Remarques :
Effectivement toutes les Collections implémentent Iterable (l'interface Collection hérite directement de l'interface Iterable)
La boucle for peut aussi être utilisé comme une boucle "for each" sur les tableaux.
Il n'est pas nécessaire que "Truc" soit une classe, ça peut être un type primitif, une interface, ou même un type paramétré <E>

Pour en revenir au code, en Java on aurait quelque chose comme ceci, mais ça dépendra fortement du type de "LIsteDev" parce qu'a-priori dans les classes standards Java il n'y a pas de méthode "add" à deux arguments, de plus l'objet "LIsteDev.Values" serait généralement inutile, on pourrait directement itérer sur "LIsteDev" sans passer par "Values"

Remarque : j'ai modifié les noms dans ton code pour respecter les conventions de nommage Java.

public void ajouterParticipant(NewClass ex) 
{
    listeDev.add(ex.matricule, ex);
}

public float calculeSalaireTousParticipants() 
{
    float sum = 0;
    for (NewClass e : listeDev.values)
        sum += e.calculSalaire(e.nbh);
    return sum;
}
0
meryem
 
on m'a donnée erreur sur values :
for (NewClass e : listeDev.values)
listeDev est un objet hashtable
Hashtable LIsteDev = new Hashtable();
l'erreur est : values has private access in hashtable

et aussi pour la ligne sur add et matricule :
public void AjouterParticipant(NewClass ex)
{
LIsteDev.add(ex.matricule, ex);
}
MERCI et je m'excuse pour le dérangement
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
listeDev est un objet hashtable
C'est curieux de nommer un hashtable en l'appelant "liste".

"values" est une méthode, pas un attribut, il lui faut donc des arguments ? values()

Remarque : dans la documentation il est déconseillé d'utiliser Hashtable, qui est une vieille classe Java 1, on lui préférera HashMap, voire ConcurrentHashMap si l'application doit être thread-safe.

// remplacer "Object" par le type de "NewClass.matricule" 
HashMap<Object,NewClass> mapDev = new HashMap<Object,NewClass>(); 

public void ajouterParticipant(NewClass ex) 
{ 
    mapDev.put(ex.matricule, ex); 
} 

public float calculeSalaireTousParticipants()  
{ 
    float sum = 0; 
    for (NewClass e : mapDev.values()) 
        sum += e.calculSalaire(e.nbh); 
    return sum; 
}

À noter qu'il y a aussi les TreeMap qui sont souvent plus performantes que les HashMap (lorsqu'il y a peu de valeurs notamment) et qui nécessitent juste que les clés soient Comparable, ce qui est certainement le cas de tes "matricule".
0
meryem
 
merci à vous pour votre aide , ça m'a beaucoup aidé. une petite dernière question si vous le permettez .
Comment écrire Console.ReadKey(); en java .
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je ne connais pas le C# donc je ne sais pas à quoi sert Console.ReadKey()...

En Java la classe Console existe mais à mon avis ta méthode doit plutôt être équivalente à une instruction System.in.read(). Mais en pratique on utilise plutôt des classes comme Scanner :

Scanner clavier = new Scanner(System.in);
String ligne = clavier.nextLine();
int entier = clavier.nextInt();
double reel = clavier.nextDouble();
// etc.
0