Печать адреса памяти вместо данных в 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());
Другие вопросы по тегам