2015-08-26 2 views
1

donc j'essaye de mettre en place un tableau qui contient des coordonnées x y. le programme semble fonctionner mais mes résultats d'impression sont des adresses mémoire. voici mon code:l'adresse de la mémoire d'impression au lieu de données en Java

static class Point{ 
    int x; 
    int y; 
    @Override 
    public String toString() { 
     return x + " " + y; 
    } 
} 

public static Object thePoints(int x, int y){ 
    Point[] mypoints = new Point[10]; 
    for (int i = 0; i < mypoints.length; i++){ 
     mypoints[i] = new Point(); 
    } 
    mypoints[0].x = 200; 
    mypoints[0].y = 200; 
    return mypoints; 
} 

public static void main(String args[]) { 
    Object thing = thePoints(0,0); 

    System.out.print(thing); 
    } 
} 
entrée

est appréciée.

+0

Votre méthode renvoie un tableau de points; c'est la référence qui est imprimée. Vous devez itérer dessus et appeler votre méthode toString() pour chaque point du tableau. Pourquoi retourner un objet lorsque vous pouvez retourner un tableau de points? – duffymo

+0

@duffymo J'ai annulé votre modification récente car elle a modifié le code de telle sorte que le problème d'origine a également changé. –

+0

Désolé, je suis trop zélé et édité votre code après avoir fait des changements de format. Je pense que cela fonctionne avec les correctifs. Essayez-le. – duffymo

Répondre

1

Vous imprimez un tableau de type Point[] dans votre méthode main(), contrairement à ce qu'il apparaît. Un moyen rapide de contourner ce problème est d'utiliser Arrays.toString(). Essayez de changer le code dans votre méthode main() à ceci:

public static void main(String args[]){ 
    Object thing = thePoints(0,0); 

    System.out.print(Arrays.toString((Point[])thing)); 
} 

Si vous aussi refactoring Point.toString() à ce qui suit, vous obtenez une sortie à la recherche assez belle:

static class Point{ 
    int x, y; 

    @Override 
    public String toString() { 
     return "(" + x + ", " + y + ")"; // print out a formatted ordered pair 
    } 
} 

Sortie:

[(200, 200), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)] 
+0

cela fonctionne presque son me dire: aucune méthode appropriée trouvée ne peut pas convertir l'objet en quoi que ce soit – drako234

+0

génial merci beaucoup. – drako234

+0

S'il vous plaît marquer la réponse correcte si elle a résolu votre problème. –

0

Vous imprimez directement le 'objet'. System.out.print() ne fonctionne que sur les chaînes de caractères et les types de données primitifs, donc si vous vouliez imprimer des informations sur le 'objet', vous devriez utiliser la méthode toString() que vous avez déclarée pour la classe 'Point'.

System.out.println(thing[0].toString()); 
+0

Incorrect - cela fonctionne sur n'importe quelle classe qui remplace toString() correctement. Les tableaux ne le font pas. – duffymo

+0

Merci pour la critique constructive même si c'était un peu désagréable :). –

+0

Rude? Tu es trop sensible. – duffymo

0

Vous essayez d'imprimer un tableau d'objets point, c'est pourquoi il imprime l'adresse mémoire. Vous pouvez utiliser une ArrayList au lieu d'un tableau. L'impression d'une liste de tableaux appelle la méthode toString de chaque élément qui, dans votre cas, est la méthode toString de Point Class.