2016-02-15 2 views
0

Bonjour,Comment obtenir la même instance d'une classe en Java?

J'ai un petit problème. J'ai créé une classe nommée Map(). Dans cette classe, il existe une méthode qui génère un tableau. Ensuite, j'ai créé deux autres classes (Top et Bottom) qui étendent la carte. Ensuite, j'ai créé 2 objets. Un des meilleurs et un de bas. Je veux obtenir le même tableau pour l'objet Top et pour l'objet Bottom. Voici le code source:

public class Map{ 
    public Map(){} 

    public int [] yTopValues() 
    { 
     int [] arrayTopY = new int[100]; 
     for(int i=0;i<100;i++) 
      arrayTopY[i]=randomInt(-50,50);//it puts in i-th position an int between 50 and -50 
     return arrayTopY; 
    } 

    public int [] yBottomValues() 
    { 
     int [] arrayBottomY = yTopValues; 
     for(int i=0;i<100;i++) 
      arrayBottomY[i]=arrayBottomY[i]-250; 
     return arrayBottomY; 
    } 

    public int [] xValues() 
    { 
     int [] arrayX = new int[100]; 
     for(int i=0;i<100;i++) 
      arrayX[i]=randomInt(0,50);//it puts in i-th position an int between 0 and 50 
     return arrayX; 
    } 
//other stuff 
} 


public class TopMap extends Map{ 

    public TopMap(){ 
     this.area=new Area(new Polygon(
      this.xValues, 
      this.yTopValues, 
      200)    
    ); 
    } 

public class BottomMap extends Map{ 

    public BottomMap(){ 
     this.area=new Area(new Polygon(
      this.xValues, 
      this.yBottomValues, 
      200)    
    ); 
    } 

Dans la classe View j'ai créé deux objets l'un des TopMap et l'un des BottomMap alors j'ai dessiné les zones avec g2.draw (topMap.area) et g2.draw (bottomMap.area)

J'ai besoin que les 2 polygones soient similaires, mais les deux sont différents parce que la méthode est exécutée deux fois. Que devrais-je faire? Merci beaucoup !!

+1

La conception n'a aucun sens. Pourquoi Map crée-t-il des valeurs supérieures et inférieures plutôt que de laisser les sous-classes créer les leurs? – duffymo

+1

Comme 'Map' ne stocke pas les tableaux, chaque appel à l'une des trois méthodes créera un nouveau tableau, même s'il est appelé sur la même instance de' Map'. La seule façon d'obtenir le même tableau à plusieurs reprises serait de le stocker quelque part. Peut-être en ne sous-classant pas 'Map', mais en utilisant à la fois' TopMap' et 'BottomMap', prenez une instance' Map' et faites en sorte que cette instance 'Map' stocke les tableaux dans les champs. – Andreas

+1

Je wat pour créer un tunnel qui n'est pas linéaire ... et oui cela n'a peut-être aucun sens .. Je ne suis pas un programmeur professionnel. J'en ai juste besoin pour un projet – MArivs

Répondre

0

La classe map ne contient pas la matrice. Il est local uniquement pour la méthode xValues ​​(). Si vous souhaitez que les autres classes obtiennent ce tableau exact, procédez comme suit:

/* 
* Since this is a variable in the CLASS field, this object will 
* be accessible to the child class. 
*/ 
private int[] arrayX = new int[100]; 

public Map(){ 
    createArrayX(); // This makes sure that the array is created, or else 
    // every value inside of it will be 0. 
} 

public void createArrayX(){ // Exact same thing as xValues(), but without the return type 
    for(int i=0;i<100;i++){ 
     arrayX[i]=randomInt(0,50); 
    } 
} 

public int[] getArrayX(){ // The method that gets the array. 
    return arrayX; 
} 
+0

Merci beaucoup, mais ça ne marche toujours pas !! – MArivs