Methode

Résolu/Fermé
meryem - 3 janv. 2013 à 23:49
 meryem - 4 janv. 2013 à 16:59
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 samedi 30 août 2008 Statut Membre Dernière intervention 21 juin 2015 859
Modifié par bizu53 le 4/01/2013 à 00:01
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 janv. 2013 à 01:47
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
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 4/01/2013 à 08:35
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
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 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
4 janv. 2013 à 16:56
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