2010-03-12 22 views
5

cách tốt nhất để làm như sau là gì:thêm đối tượng với tên khác nhau thông qua vòng lặp for

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
    MyObject o1 = new MyObject(); 
    list.add(o1); 
} 

Nhưng những điều là tôi không muốn tạo các đối tượng với cùng một tên, tôi muốn tạo ra chúng với tên khác như o1,o2,o3,o4,o5,o6,o7,o8,o9,o10 và tôi muốn thêm từng danh sách vào danh sách. Cách tốt nhất để làm việc này là gì ?

+2

Xin lỗi, nhưng ý bạn là gì với tên? Tên của biến cục bộ được loại bỏ bởi trình biên dịch. –

+2

Câu hỏi lớn ở đây là tại sao? Tên của biến trong trường hợp này sẽ không tồn tại trong quá khứ forloop (hoặc thậm chí vào vòng lặp tiếp theo của forloop) trong mọi trường hợp. Làm thế nào/Tại sao tên của nó lại quan trọng? – GWLlosa

+1

Tại sao bạn cần phải có tên biến của đối tượng của bạn khác nhau bên trong một vòng lặp? Tên biến trong ví dụ bạn cung cấp là không liên quan ... –

Trả lời

10

Bạn không cần sử dụng tên khác cho từng đối tượng. Vì đối tượng o1 được khai báo trong vòng lặp for, phạm vi của biến o1 bị giới hạn trong vòng lặp for và nó được tái tạo trong mỗi lần lặp ... ngoại trừ mỗi lần nó sẽ tham chiếu đến đối tượng mới được tạo trong lần lặp đó. Lưu ý rằng biến tự nó không được lưu trữ trong danh sách, chỉ là đối tượng mà nó đang đề cập đến.

Nếu bạn không cần phải làm bất cứ điều gì khác với các đối tượng mới khác hơn là thêm nó vào danh sách, bạn có thể làm:

for(int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
+0

Không phải là câu trả lời cho câu hỏi của anh ấy. – Younes

+3

Làm thế nào? Trông giống như một câu trả lời hoàn hảo cho tôi. – razlebe

+1

Hmm, tôi có lẽ đã đọc câu hỏi theo cách sai rồi .. Tôi nghĩ anh ấy sau khi đặt tên cho các đối tượng của mình: o1, o2, o3, o4, o5, o6, o7, o8, o9, o10. Gave điểm tôi lấy đi trở lại;). – Younes

1

Đối tượng của bạn không có tên. Biến số o1 có tên nhưng không được liên kết với đối tượng ngoại trừ biến tham chiếu đến đối tượng. Đối tượng trong danh sách không có kiến ​​thức bao giờ được tham chiếu bởi biến số o1.

Đối với những gì bạn đang làm, bạn không cần một biến ở tất cả, như Stephen nói trong câu trả lời của anh bạn chỉ có thể thêm các đối tượng trực tiếp:

for (int i=0; i<30;i++) 
{ 
    list.add(new MyObject()); 
} 
2

Trong bối cảnh của vòng lặp của bạn, bạn không cần phải lo lắng về việc sắp xếp một tên cho mỗi cá thể mới mà bạn tạo ra. Đủ để nói

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 
6

Tại sao bạn muốn đặt cho họ tên khác? Bạn đang tạo ra đối tượng bên trong vòng lặp for, vì vậy nó không tồn tại bên ngoài, và tôi thấy lý do noe để cung cấp cho chúng các tên khác nhau.

Để trả lời câu hỏi của bạn: Cách duy nhất tôi nhìn thấy, nhưng tôi có thể sai, là làm cho một mảng của MyObjects và làm:

List<MyObject> list = new LinkedList<MyObject>(); 
MyObject[] o = new MyObject[30]; 

for(int i = 0; i < 30; i++) { 
    o[i] = new MyObject(); 
    list.add(o[i]); 
} 
+0

Đó sẽ là câu trả lời của tôi, nhưng nói rằng đối tượng không tồn tại bên ngoài vòng lặp là sai, nó chỉ là biến không hợp lệ bên ngoài vòng lặp. Đối tượng vẫn được (tham chiếu) trong danh sách. –

+0

True, có nghĩa là ofcourse biến. Thực hiện một chỉnh sửa về điều đó. – martiert

2

gì bạn có thể làm (mặc dù điều đó sẽ không làm cho nhiều ý nghĩa hoặc), là sử dụng Bản đồ thay vì một Danh sách

Map<String, MyObject> map = new HashMap<String, MyObject>(); 

for (int i = 0; i < 10; i++) { 
    map.put("o" + i, new MyObject()); 
} 
-1

Tạo đối tượng đặt tên, thêm nhà thầu của bạn. sau đó thêm tên đối tượng vào danh sách.

1
doing it this way: 

List<MyObject> list = new LinkedList<MyObject>(); 

for(int i=0; i<30;i++) 
{ 
list.add(new MyObject()); 
} 

when i try to read the objects from the list they all return the same object with same values for instance variables. 

i have an Emp class with 3 instance variables 
name,dob and salary these values are read from list lst1. 

for(int k=0;k<lst1.size();k++){ 

obj1=new Emp((lst1.get(k).get("name")),(lst1.get(k).get("dob")), 

(lst1.get(k).get("salary"))); 

     lst3.add(k,obj1); 
      } 

but on reading lst3.get(3) or lst3.get(0) 

Emp temp=lst3.get(3); 

String name=temp.name; 

come same as 

Emp temp=lst3.get(0); 

String name=temp.name; 

please provide me with a solution 
Các vấn đề liên quan