2010-04-26 35 views
12

Giả sử tôi cần tạo một chuỗi các đối tượng String [].Làm cách nào để tự động đặt tên các đối tượng trong Java?

Tôi biết rằng nếu tôi muốn làm một mảng chuỗi gọi là "test" để giữ 3 Strings tôi có thể làm

String [] test = new String [3];

Nhưng giả sử tôi cần tạo một chuỗi các mảng này và tôi muốn chúng được đặt tên là 1,2, 3, 4, 5 ... v.v. Tuy nhiên, nhiều thứ tôi cần và tôi không biết cách nhiều điều tôi cần.

Làm thế nào để đạt được hiệu quả tương tự như sau:

for (int k=0; k=5; k++){ 
String[] k = new String[3]; 
} 

Trong đó sẽ tạo ra 5 mảng chuỗi tên từ 1 đến 5. Về cơ bản tôi muốn để có thể tạo các đối tượng mảng với một tên detemined bởi một số chức năng khác . Tại sao tôi không thể làm điều này? Tôi chỉ là ngu ngốc?

+0

Trường hợp sử dụng mà bạn đang nghĩ đến đối với hành vi này là gì? Có thể biết rằng chúng tôi có thể giúp bạn tìm ra cách Java để thực hiện những gì bạn muốn, không có biến được đặt tên động. – Phil

Trả lời

17

Không có "biến số biến" (đó là biến có tên biến) trong Java, nhưng bạn có thể tạo Bản đồ hoặc mảng để xử lý vấn đề cụ thể của mình. Khi bạn gặp phải một vấn đề khiến bạn nghĩ "Tôi cần các biến của mình để thay đổi tên động", bạn nên thử và nghĩ "mảng kết hợp". Trong Java, bạn nhận được mảng kết hợp sử dụng Map s.

Đó là, bạn có thể giữ một danh sách các mảng của bạn, một cái gì đó như:

List<String[]> kList = new ArrayList<String[]>(); 
for(int k = 0; k < 5; k++){ 
    kList.add(new String[3]); 
} 

Hoặc có lẽ một chút gần gũi hơn với những gì bạn đang sau, bạn có thể sử dụng một bản đồ:

Map<Integer,String[]> kMap = new HashMap<Integer,String[]>(); 
for(int k = 0; k < 5; k++){ 
    kMap.put(k, new String[3]); 
} 
// access using kMap.get(0) etc.. 
3

gần nhất bạn sẽ nhận được trong Java là:

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

for (int k=0; k=5; k++){ 
    map.put(Integer.toString(k), new String[3]); 
} 

// now map.get("3") will get the string array named "3". 

Lưu ý rằng "3" không phải là một biến, nhưng trong con đường giao nhau với các đối tượng map nó hoạt động giống như một ... loại.

2

Những gì bạn muốn làm được gọi là lập trình meta - lập trình một chương trình mà Java không hỗ trợ (nó chỉ cho phép siêu dữ liệu thông qua chú thích). Tuy nhiên, đối với một trường hợp sử dụng dễ dàng như vậy, bạn có thể tạo một phương thức sẽ lấy một int và trả về mảng chuỗi mà bạn muốn, ví dụ: bằng cách xử lý mảng mảng. Nếu bạn muốn một số quy ước đặt tên phức tạp hơn, hãy xem xét tuyên bố swtich cho vài giá trị và ánh xạ để có thêm giá trị. Đối với số lượng cố định của các giá trị với tên tùy chỉnh xác định một Enum, có thể được thông qua như một đối số.

7

Những người khác đã cung cấp câu trả lời tuyệt vời, nhưng chỉ để trang trải tất cả các cơ sở, Java không có mảng mảng.

String[][] k = new String[5][3]; 
k[2][1] = "Hi!"; 

Bây giờ bạn không có 5 biến tên k1, k2, k3, k4, k5, mỗi trở thành một String[3] ...

... nhưng bạn có một mảng của String[], k[0] , k[1], k[2], k[3], k[4], mỗi số là String[3].

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