Печать адреса памяти вместо данных в Java
Поэтому я пытаюсь установить массив, который содержит координаты XY. Программа, кажется, работает, но мои результаты печати являются адресами памяти. вот мой код:
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);
}
}
вход ценится.
3 ответа
Вы распечатываете массив типа Point[]
в вашем main()
метод, вопреки тому, что кажется. Быстрый способ обойти эту проблему - использовать Arrays.toString()
, Попробуйте изменить код в вашем main()
метод к этому:
public static void main(String args[]){
Object thing = thePoints(0,0);
System.out.print(Arrays.toString((Point[])thing));
}
Если вы также рефакторинг Point.toString()
к следующему, тогда вы получите довольно симпатичный вывод:
static class Point{
int x, y;
@Override
public String toString() {
return "(" + x + ", " + y + ")"; // print out a formatted ordered pair
}
}
Выход:
[(200, 200), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0), (0, 0)]
Вы пытаетесь напечатать массив точечных объектов, поэтому он печатает адрес памяти. Вы можете использовать ArrayList вместо массива. Печать списка массивов вызовет метод toString каждого элемента, который в вашем случае является методом toString класса Point.
Вы печатаете "Объект вещь" напрямую. System.out.print() работает только со строками и примитивными типами данных, поэтому, если вы хотите напечатать информацию об объекте, вы должны будете использовать метод toString(), который вы объявили для класса "Point".
System.out.println(thing[0].toString());