Как отобразить все элементы в массиве? - PullRequest
16 голосов
/ 18 апреля 2009

Скажем, у меня есть класс автомобиля с атрибутами make и registration, и я создаю ArrayList для их хранения. Как отобразить все элементы в ArrayList?

У меня есть этот код прямо сейчас:

public Car getAll()
{
    for(int i = 0; i < cars.size(); i++) //cars name of arraylist
    {
        Car car = cars.get(i);  
        {
            return cars.get (i);
        }
    }
    return null;
}

Он прекрасно компилируется, но когда я попробую его в классе тестеров, используя этот код:

private static void getAll(Car c1)
{
    ArrayList <Car> cars = c1.getAll(); // error incompatible type
    for(Car item : cars)
    {   
        System.out.println(item.getMake()
                + " "
                + item.getReg()
                );
    }
}

Я получаю ошибку несовместимого типа. Правильно ли написано мое кодирование? Если нет, может кто-нибудь, пожалуйста, покажите мне, как это должно быть?

Спасибо

Ответы [ 9 ]

12 голосов
/ 18 апреля 2009

Вы пытаетесь сделать что-то подобное?

public List<Car> getAll() {
    return new ArrayList<Car>(cars);
}

А потом называет это:

List<Car> cars = c1.getAll();
for (Car item : cars) {   
    System.out.println(item.getMake() + " " + item.getReg());
}
2 голосов
/ 18 апреля 2009

Другой подход - добавить метод toString() в ваш класс Car и просто позволить методу toString() ArrayList выполнять всю работу.

@Override
public String toString()
{
    return "Car{" +
            "make=" + make +
            ", registration='" + registration + '\'' +
            '}';
}

Вы не получаете одну машину на строку в выводе, но это быстро и легко, если вы просто хотите увидеть, что находится в массиве.

List<Car> cars = c1.getAll();
System.out.println(cars);

Вывод будет примерно таким:

[Car{make=FORD, registration='ABC 123'},
Car{make=TOYOTA, registration='ZYZ 999'}]
2 голосов
/ 18 апреля 2009

Тангенциальный: String.format () пород:

public String toString() {
    return String.format("%s %s", getMake(), getReg());
}

private static void printAll() {
    for (Car car: cars)
        System.out.println(car); // invokes Car.toString()
}
2 голосов
/ 18 апреля 2009

Не совсем понятно, что ты задумал. Ваша функция getAll () должна возвращать List , а не Car. Иначе зачем называть это getAll?

Если у вас есть

Car[] arrayOfCars

и хотите получить список, вы можете просто сделать это:

List<Car> listOfCars = Arrays.asList(arrayOfCars);

Массивы задокументированы Здесь .

2 голосов
/ 18 апреля 2009

Вы получаете сообщение об ошибке, потому что ваша функция getAll в классе Car возвращает один объект Car, и вы хотите назначить его в массив.

Это действительно не ясно, и вы можете разместить больше кода. почему вы передаете один автомобиль в функцию? В чем смысл вызова getAll на автомобиле.

2 голосов
/ 18 апреля 2009

Ваш getAll() метод не получает все. Возвращает первую машину.

Оператор return завершает цикл.

1 голос
/ 18 апреля 2009

Привет, извините, код для второго должен быть:

приватная статическая пустота getAll (CarList c1) {

ArrayList <Car> cars = c1.getAll(); // error incompatible type
for(Car item : cars)
{   
      System.out.println(item.getMake()
                       + " "
                       + item.getReg()
                       );
}

}

У меня есть класс с именем CarList, который содержит arraylist и его метод, поэтому в классе тестера у меня есть в основном этот код для использования этого класса CarList:

CarList c1; c1 = новый CarList ();

все остальное работает, например, добавление и удаление автомобилей и отображение отдельного автомобиля, мне просто нужен код для отображения всех автомобилей в массиве.

0 голосов
/ 11 мая 2018

Arraylist использует интерфейс Iterator для прохождения элементов Используйте это

public void display(ArrayList<Integer> v) {
        Iterator vEnum = v.iterator();
        System.out.println("\nElements in vector:");
        while (vEnum.hasNext()) {
            System.out.print(vEnum.next() + " ");
        }
    }
0 голосов
/ 19 августа 2017

Вы можете использовать arraylistname.clone()

...