Transfert d'une matrice vers hashSet

Fermé
firas scofield Messages postés 14 Date d'inscription dimanche 30 mars 2014 Statut Membre Dernière intervention 5 novembre 2016 - Modifié par crapoulou le 5/11/2016 à 13:46
josaphat_mayuba Messages postés 16 Date d'inscription samedi 12 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 - 13 nov. 2016 à 19:58
Bonjour, j'ai une classe "grille_chiffre" qui rempli une matrice par des valeurs aléatoire , ensuite dans la classe fille "urne" je doit transférer les valeurs de la matrice dans une hashSet donc j'ai besoin de faire appel à super.initialiser(). le problème et quand j' afficher la matrice via la classe grille w le hashSet via la classe urne il ne sont pas identiques et je trouve des valeurs différents.

voila le contenu des deux classes:

import java.util.*;
public class grille_chiffre {
protected Object[][] gc;
public grille_chiffre(){
    gc=new Object[5][5];
}
 
public Object[][] getGc() {
    return gc;
}
 
public void setGc(Object[][] gc) {
    this.gc = gc;
}
 
public void initialiser(){
    int nb;
    double nbd;
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++){
            do{
         nbd=Math.random()*(100-0);
         nb=(int)nbd;
        }while(existe(nb));
            gc[i][j]=nb;
        }
}
public boolean existe(Object x){
    int i=0;
    boolean trouve=false;
    while(i<5 && !trouve){
        int j=0;
        while(j<5 && !trouve){
            if(gc[i][j]==x)
                trouve=true;
            else j++;
        }
        i++;
    }
    return trouve;
}
public void affichage(){
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            System.out.print(gc[i][j]+" ");
        }
        System.out.println();
    }
}
}


import java.util.*;
public class urne2 extends grille_chiffre{
private HashSet<Object> ur;
public urne2(){
    ur=new HashSet<Object>();
}
public void initialiser(){
    super.initialiser();
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++){
            ur.add(super.getGc()[i][j]);
        }                                      
    System.out.println();
     
}
public void affichage(){
    Object[]e=ur.toArray();
    for(int i=0;i<e.length;i++)
        System.out.print(e[i]+" ");
}
}

Main
grille_chiffre g=new grille_chiffre();
urne2 ur=new urne2();
g.initialiser();
g.affichage();
System.out.println("Urne");
ur.initialiser();
ur.affichage();


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

A voir également:

2 réponses

Utilisateur anonyme
6 nov. 2016 à 15:33
Salut,

Si tu crées une instance de
grille_chiffre
, elle n'a rien à voir avec
urne2
même si elle est fille de
grille_chiffre
(l'instanciation de
urne2
créé une nouvelle instance de
grille_chiffre
)
0
josaphat_mayuba Messages postés 16 Date d'inscription samedi 12 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 1
Modifié par josaphat_mayuba le 13/11/2016 à 20:08
salut, je vois que tu réinitialise le tableau qui crée un nouveau tableau avec des contenus différents vu c'est du random. tu peux appelé grille_chiffre directement
import java.util.*;

public class urne2  {
  
 protected Object[][] gc;

 public urne2() {
  super(); 
 }

 public Object[][] getGc() {
  return gc;
 }

 public void setGc(Object[][] gc) {
  this.gc = gc;
 }

 public void affichage() {

  for (int i = 0; i < 5; i++) {
   for (int j = 0; j < 5; j++) { 
    System.out.print(getGc()[i][j] + " ");
   }
   System.out.println();
  }
}
 }
0
josaphat_mayuba Messages postés 16 Date d'inscription samedi 12 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 1
13 nov. 2016 à 19:55
main
	grille_chiffre g = new grille_chiffre();
		urne2 ur = new urne2();
		g.initialiser();
		g.affichage();
		ur.setGc(g.gc);
		System.out.println("Urne");
		ur.affichage();
0
josaphat_mayuba Messages postés 16 Date d'inscription samedi 12 novembre 2016 Statut Membre Dernière intervention 22 novembre 2016 1
13 nov. 2016 à 19:58
tu peux maintenant mettre ton hashset si tu veux pour éviter de faire juste deux fois for
0