Forum Clubic

Petit probleme JAVA

bonsoir tout le monde
j’ai comme qui dirait un petit probleme je voudrais montrer
12 singes, 26 gorilles, 14 girafes, 22 porcs e 3 javalis.

qui sont les infos données dans 2 matrices differentes
une contient le numero et l’autre les noms des animaux:

String animaux[] = {“Macaco”, “Gorila”, “Girafa”, “Porco”, “Javali”};
int exemplaires[] = {12, 26, 14, 22, 3};

j’ai fait cela:
public static void montreMatrice(String[] matrice) {

	for (int i = 0; i != matrice.length; i++)
		System.out.print(" " + matrice[i]);
}
	
	public static void montrerMatrice(int[] matrice) {
	for (int j = 0; j != matrice.length; j++)
		System.out.print(" " + matrice[j]);
}

public static void main(String[] args) {

	String animaux[] = { "Singe", "Gorille", "Girafe", "Porc", "Javali" };
	int exemplaires[] = { 12, 26, 14, 22, 3 };
	
	montrerMatrice(exemplaires);
	montrerMatrice(animaux);


}

et cela me donne
12 26 14 22 3 Singe Gorille Girafe Porc Javali

et j’ai envie d’associer les deux!
le premier numero avec le premier nom, le 2eme numero avec le 2eme noms et ainsi de suite…
du genre:

12 singes, 26 gorilles, 14 girafes, 22 porcs e 3 javalis
y-a-t’il qq1 qui pourrais me dire comment faire si il faut ajouter un if qq part ou pas!
merci d’avance

A toi de créer un nouvelle méthode qui aura comme paramètres tes 2 tableaux et affichera au format souhaité, sachant le nb et le nom de l’animal sont au même indice de leur tableau respectif



System.out.print(" " + tableauQuantite[i] + " " + tableauNom[i]);


A toi ensuite de faire la boucle qui parcours ton tableau, comme tu l’as fait dans tes autres fonctions.

Dites les gars, vous savez que Java est un langage objet ?

Classe collectionAnimaux {
private int nombre;
private String nom;
// Je passe sur les accesseurs/modificateurs)
// A la rigueur, on requalifie
public String toString() {
    return "nombre + " " + nom";
}

puis

collectionAnimaux[] animaux...

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

est quand même plus simple à gérer…
Edité le 12/11/2008 à 11:39

Tu maitrises ce langage objet à la perfection, toutes mes félicitations.

En relisant le problème tu comprendras qu’ici le langage Java est un support pour apprendre les bases algorithmiques, les notions objets seront surement vues ultérieurement.

Ben non, c’est indiqué nul part que c’est un problème d’algo, mais bien un problème Java… De plus, ça ressemble à la manière récurrente qu’ont les gens qui font du procédural qui s’attaquent à un langage objet, c’est à dire de continuer à faire du procédural, en appelant les bibliothèques de fonction “classes”. Enfin, en général, quand on se contente d’apprendre un algo (tu sous entends ici le parcours de 2 listes, oui je maîtrise l’algo aussi :wink: ), on s’enquiquine pas à faire des méthodes (et donc gérer les types différents).

en claire, le test d’une telle algo est en général

public static void main(String[] args) {

String animaux[] = { "Singe", "Gorille", "Girafe", "Porc", "Javali" };
int exemplaires[] = { 12, 26, 14, 22, 3 };

for (int i = 0; i != animaux.length; i++)
    System.out.print(" " + animaux[i]);

for (int j = 0; j != exemplaires.length; j++)
    System.out.print(" " + exemplaires[j]);
}

pour lequel la solution aurai été

public static void main(String[] args) {

String animaux[] = { "Singe", "Gorille", "Girafe", "Porc", "Javali" };
int exemplaires[] = { 12, 26, 14, 22, 3 };

for (int i = 0; i < animaux.length && i < exemplaires.length; i++)
    System.out.println(animaux[i] + " " + matrice[i]);

}

Je ne m’y connais pas beaucoup en Java, j’ai lu un livre, et il y a un chapitre consacré aux “threads”(la partie que j’ai trouvé pas très évidente), il n’y a pas moyen de résoudre ce problème en utilisant ça (j’ai conscience que c’est sûrement un problème d’algo, je pose juste la question pour voir un peu plus loin) avec une boucle pour afficher les animaux et une pour afficher les nombres ?
Edité le 23/11/2008 à 22:05

Oui et non.

Les threads, c’est complètement autre chose. Considère plutôt que c’est comme si tu lançais deux programmes en même temps : là, tu veux associer nombre et animaux, donc sauf à mettre en place un complexe système de synchronisation de thread, tu n’y arriveras pas avec…

Sinon y’a encore plus simple :


public static void main(String[] args) {
    	java.util.Map<String, Integer> collec = new java.util.HashMap<String, Integer>();
    	collec.put("Singe", 12);
    	collec.put("Gorille", 26);
    	collec.put("Girafe", 14);
    	collec.put("Porc", 22);
    	collec.put("Javali", 3);
    	for (java.util.Map.Entry<String, Integer> value: collec.entrySet()) {
    		System.out.println(value.getKey() + "=>" + value.getValue());
    	}

}

Aussi.

Par contre avec les thread il vaut mieux utiliser un java.util.concurrent.ConcurrentMap :slight_smile: Mais je vois pas l’intérêt d’aller utiliser un thread pour remplir des données d’initialisation :stuck_out_tongue:

Là, ne m’en demande pas plus. Et je ne suis pas l’auteur du thread :smiley: