2009-04-17 46 views
15

Giả sử tôi có một lớp học xe hơi với các thuộc tính makeregistration và tôi tạo một ArrayList để lưu trữ chúng. Làm cách nào để hiển thị tất cả các phần tử trong ArrayList?Làm cách nào để hiển thị tất cả các phần tử trong danh sách mảng?

tôi có mã này ngay bây giờ:

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; 
} 

Nó biên dịch tốt nhưng khi tôi thử nó ra trong lớp học thử nghiệm của tôi sử dụng mã này:

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

Tôi nhận được một lỗi kiểu không tương thích . Mã hóa của tôi có đúng không? Nếu không ai đó có thể vui lòng cho tôi biết nó nên như thế nào?

Cảm ơn bạn

Trả lời

2

Phương thức getAll() của bạn không nhận được tất cả. Nó trả lại chiếc xe đầu tiên.

Tuyên bố return kết thúc vòng lặp.

2

Bạn đang gặp lỗi vì hàm getAll của bạn trong lớp Car trả về một Ô tô duy nhất và bạn muốn gán nó vào một mảng.

Thực sự không rõ ràng và bạn có thể muốn đăng thêm mã. tại sao bạn đi qua một chiếc xe duy nhất cho chức năng? Ý nghĩa của việc gọi getAll trên xe hơi là gì.

10

Bạn đang cố gắng làm một cái gì đó như thế này?

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

Và rồi gọi đó là:

List<Car> cars = c1.getAll(); 
for (Car item : cars) { 
    System.out.println(item.getMake() + " " + item.getReg()); 
} 
+1

Tôi nghĩ rằng bạn hoàn toàn đúng, trừ khi bạn có một danh sách xe hơi, thì tại sao trả lại một mới danh sách chứa các phần tử của nó thay vì chỉ đơn giản là trả lại danh sách gốc: trả lại xe; – nsayer

+2

Tốt hơn, bạn có thể trả về Collections.unmodifiableList (ô tô), giúp bảo vệ danh sách khỏi bị người dùng của lớp sửa đổi. – nsayer

+0

Bạn là một huyền thoại. Nó hoạt động! Tôi đã dành 2 giờ cố gắng để làm điều này và bạn đã làm nó trong 2 phút. Cảm ơn bạn rất rất rất nhiều! :) –

2

Nó không phải ở tất cả rõ ràng những gì bạn đang lên đến. Hàm getAll() của bạn sẽ trả về một Danh sách <Xe>, không phải là Ô tô. Nếu không, tại sao gọi nó là getAll?

Nếu bạn có

Car[] arrayOfCars 

và muốn có một danh sách, bạn chỉ có thể làm điều này:

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

Mảng là tài liệu Here.

1

Hi xin lỗi mã cho một thứ hai nên là:

private static void GetAll (CarList c1) {

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

}

Tôi có một lớp được gọi là CarList chứa arraylist và phương thức của nó, vì vậy trong lớp tester, tôi về cơ bản mã này để sử dụng lớp CarList đó:

CarList c1; c1 = new CarList();

mọi thứ khác hoạt động, chẳng hạn như thêm và xóa ô tô và hiển thị ô tô không đồng nhất, tôi chỉ cần mã để hiển thị tất cả các xe trong danh sách.

+0

getAll() phải trả về một Danh sách , không phải là Ô tô. Và nó không nên lặp đi lặp lại thông qua danh sách xe hơi, mà chỉ cần trả lại toàn bộ danh sách. – nsayer

+0

Cảm ơn bạn rất nhiều vì không biết điều đó. –

+0

Tại sao sử dụng Danh sách xe hơi thay cho Danh sách ? Nó có làm điều gì đó hơn cái tên của nó không? –

2

Tiếp tuyến: 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

cách tiếp cận khác là thêm một phương pháp toString() đến lớp Car của bạn và chỉ cho phép các phương pháp toString() của ArrayList làm tất cả công việc.

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

Bạn không nhận được một ô tô trên mỗi dòng ở đầu ra, nhưng sẽ nhanh chóng và dễ dàng nếu bạn chỉ muốn xem những gì có trong mảng.

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

Output sẽ là một cái gì đó như thế này:

[Car{make=FORD, registration='ABC 123'}, 
Car{make=TOYOTA, registration='ZYZ 999'}] 
-1

Bạn có thể sử dụng arraylistname.clone()

+0

Thêm thông tin khác vào bài đăng của bạn. Không chỉ một vài từ. – SteveFest

Các vấn đề liên quan