2010-10-19 16 views
0

J'ai créé un objet Matrix (comme la matrice mathématique, un bloc de nombres 4x4 par exemple) et cela fonctionne bien, peut définir ligne, col, variable très bien, mais, je ne peux pas J'ai plus d'un objet du même objet, je le crée en créant une ArrayList d'une douzaine d'objets Matrix, chacun avec les trois variables, mais quand j'appelle changeVar (Matrix x, int variable) et rafraîchit l'impression de la matrice, ça change tout des nombres à ce que j'ai changé la variable. Donc, il semble que c'est juste de créer la même instance encore et encore, et si vous en changez un, il les change tous, est-ce que je manque quelque chose d'évident?Création d'un objet [multiple de la même instance]

public class Matrices { 

    private static int row, col, value, newRow, newCol; 

    public Matrices(int row, int col, int value) { 
     this.value = value; 
     this.row = row; 
     this.col = col; 
    } 

    public static void setRow(int row) { 
     Matrices.row = row; 
    } 

    public static void setValue(int value) { 
     Matrices.value = value; 
    } 

    public static void setCol(int col) { 
     Matrices.col = col; 
    } 

    public static int getCol(Matrices x) { 
     return col; 
    } 

    public static int getRow(Matrices x) { 
     return row; 
    } 

    public static int getValue(Matrices x) { 
     return value; 
    } 

    public static Matrices changeValue(Matrices x, int value) { 
     newRow = getRow(x); 
     newCol = getCol(x); 
     return new Matrices(newRow, newCol, value); 
    } 
} 

Répondre

2

Vous utilisez des membres statiques. Les membres statiques sont partagés entre toutes les instances.

Ne faites pas cela: supprimez le mot-clé 'static'.

Je suis surpris qu'il n'y avait pas de mises en garde sur les lignes this.x = x ...

heureux de codage

+0

ooh, merci, je me suis dit que c'était en cause parce que ça marchait, alors j'ai fixé des avertissements et suis passé, alors tout d'un coup cela n'a pas fonctionné ... maintenant, c'est une douleur dans la crosse et je ne peux pas l'obtenir .. merci! – Samuel

1

Le modificateur « statique » sur les champs de classe (à savoir, rangée, colonne, la valeur, newRow et newcol) signifie qu'il y a une copie de ces variables par classe plutôt que par objet. En outre, vous modifiez actuellement ces valeurs statiques dans les méthodes statiques. En plus de supprimer le modificateur statique sur vos champs de classe, vous devrez supprimer les modificateurs statiques sur vos méthodes et accéder aux attributs de l'objet (champs) en utilisant "this" (si vos champs ont le même nom que les paramètres de la méthode).

+0

+1 Oui, supprimez les modificateurs statiques et vous devriez avoir le droit de créer plusieurs objets Matrix avec différentes valeurs de variable d'instance. Oh, et aussi, assurez-vous de changer Matrices.xxx = xxx à this.xxx = xxx pour vous tous ensemble des méthodes – Jacob

+0

Merci Jacob..Je ne faisais que l'ajouter à mon poste. :-) – Jesse

+0

Je l'ai eu tout cela.xxx = xxx mais éclipse à travers un ajustement .. hey si vous êtes android, consultez Ultimath Beta;) la multiplication de matrice/addition etc sera ajouté à la prochaine mise à jour j'espère :) - sur le marché des applications. twitter lifeinjava! – Samuel

4

Le problème est votre utilisation du mot-clé « statique ».

La réponse courte est: supprimer tous les mots-clés statiques. La réponse la plus longue est que les champs/méthodes statiques ne sont associés à aucune instance particulière de la classe, ce que fait votre code est de mettre un champ appelé "row", un appelé "col" etc et de les utiliser pour tous instances de la classe. Ce que vous voulez vraiment, c'est un champ par instance: cela rendra les champs non statiques. En général, évitez d'utiliser l'électricité statique à moins que vous ne le pensiez réellement, c'est-à-dire si vous voulez une classe singleton ou si vous avez une classe d'utilitaire qui ne devrait pas être instanciée.