2009-04-17 3 views
15

Скажем, у меня есть класс автомобиля с атрибутами make и registration, и я создаю ArrayList для их хранения. Как отобразить все элементы в 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() 
       ); 
    } 
} 

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

Спасибо

ответ

2

Ваш метод getAll() не получает все. Он возвращает первый автомобиль.

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

2

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

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

10

Вы пытаетесь сделать что-то вроде этого?

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()); 
} 
+1

Я думаю, что вы совершенно правы, за исключением того, если у вас есть список автомобилей, то почему бы вернуть новый список, содержащий его элементы, а не просто возврат исходного списка: возврат автомобилей; – nsayer

+2

Еще лучше, вы можете вернуть Collections.unmodifiableList (автомобили), который защитит список от изменения пользователями класса. – nsayer

+0

Вы, сэр, легенда. Оно работает! Я потратил 2 часа, пытаясь это сделать, и вы сделали это через 2 минуты. Большое спасибо! :) – 2009-04-17 22:28:03

2

Это не совсем понятно, что вы до. Ваша функция getAll() должна вернуть список < Автомобиль >, а не автомобиль. В противном случае, зачем называть его getAll?

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

Car[] arrayOfCars 

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

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

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

1

Привет жаль код второй должен быть:

частной статической силы GETALL (Карлистские c1) {

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

}

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

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

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

+0

getAll() должен вернуть список , а не автомобиль. И он не должен перебирать список машин, а просто возвращает список в целом. – nsayer

+0

Спасибо, что не знал этого. – 2009-04-17 22:30:17

+0

Зачем использовать CarList вместо списка ? Делает ли он что-то большее, чем предлагает его название? –

2

касательных: 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

Другой подход заключается в добавлении метод 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'}] 
-1

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

+0

Добавить информацию к вашему сообщению. Не только несколько слов. – SteveFest

Смежные вопросы