2013-11-17 5 views
8

Я пытаюсь распечатать содержимое списка «ArrayList», но я продолжаю получать то, что, по моему мнению, является местоположением элементов, а не содержимым.Попытка распечатать содержимое массива ArrayList

import java.util.*; 
public class Assignment23 { 

public static void main (String[] args){ 

ArrayList<Point> list = new ArrayList<Point>(); 
for(int i = 0; i < 99; i++){ 
    list.add(new Point()); 
} 
Collections.sort(list); 
System.out.println(""+list); 
} 
} 
class Point implements Comparable<Point>{ 
int x = (int)(Math.random()*-10); 
int y = (int)(Math.random()*-10); 
+0

Просто используйте 'foreach' цикл для итерации по списку. – Lion

+0

_locations_ Я думаю, вы имеете в виду _location в memory_ (т. Е. Базовый адрес объекта). Это немного неоднозначно, потому что вы говорите о _points_ здесь, которые также описывают местоположения! – DaoWen

+0

Heehee, да, извините, я имел в виду адрес: 3 – Corjava

ответ

8

Чтобы распечатать содержимое ArrayList, используйте for loop:

for (Point p : list) 
    System.out.println("point x: " + p.x ", point y: " + p.y); 
+1

Awesome! Компактный и выполняет работу! – ProfVersaggi

0

Изменить это:

System.out.println(""+list.get(i).x); //Or whatever element in `Point` you want to print 

Причина вы получаете неожиданный результат в том, что ваш список состоит из Point объектов. Поэтому вызов list.get(i) возвращает весь Point, тогда как вы хотите указать это поле в Point для печати.

6

Вы найдете, что вы получите гораздо лучшие результаты для этого и во многих ситуациях, если вы реализуете toString для Point и большинства классов, которые вы пишете. Рассмотрим это:

@Override public String toString() 
{ 
    return String.format("(%d,%d)", x, y); 
} 
+1

+1 для использования 'String.format' вместо последовательности конкатенаций строк. Я думаю, что компилятор Java достаточно умен, чтобы сделать что-то эффективное с конкатенациями, но версия строки формата всегда более читаема. (Предполагая, конечно, что читатель знает, как читать строки формата!) – DaoWen

3

перезаписывается метод ToString в точке

class Point implements Comparable<Point>{ 
    int x = (int)(Math.random()*-10); 
    int y = (int)(Math.random()*-10); 

    @Override 
    public String toString() 
    { 
    return "["+x+","+y+"]"; 
    } 
} 

Использование такой же:

Collections.sort(list); 
System.out.println("Points["+list+"]); 

вы получите выход как

Points[[20,10],[15,10]...] 
2

Override toString() метод на п oint класс.

class Point implements Comparable<Point>{ 

    @Override 
    public String toString() { 
     return "x =" + x + ", y="+y; 
    } 
} 
Смежные вопросы