2011-11-19 65 views
10

Nói rằng tôi có một mảng các số nguyên,Tạo mảng mới với nội dung từ mảng cũ trong khi vẫn giữ mảng cũ tĩnh

int[] array = new int[7]; 
for(int i = 0; i < 7; i++) 
{ 
array[i] = i; 
} 

Bây giờ tôi muốn nhận được chỉ là bốn số đầu tiên trong array đó, và rẽ đặt mà vào một mảng khác.

Vì vậy, tôi thực sự muốn một cái gì đó giống như ...

newArray = array[0-3]. 

Tôi biết cú pháp đó là sai, nhưng tôi chỉ đưa ra các ý tưởng chung của những gì tôi đang cố gắng để làm, bất cứ điều gì như thế càng tốt ? Hay tôi phải tạo một vòng lặp và thêm nó theo cách thủ công vào newArray?

Trả lời

24

Phương pháp 1

int[] newArr = new int[4]; 
System.arraycopy(array, 0, newArr, 0, 4); 

Phương pháp này cần năm đối số:

  1. src: Các mảng nguồn.
  2. srcPosition: Vị trí trong nguồn mà bạn muốn bắt đầu sao chép.
  3. des: Mảng đích.
  4. desPosition: Vị trí trong mảng đích đến nơi bản sao sẽ bắt đầu.
  5. length: Số lượng phần tử cần sao chép.

Phương thức này sẽ ném NullPointerException nếu một trong hai src hoặc des là null. Nó cũng ném ra một ArrayStoreException trong các trường hợp sau:

  • Nếu src không phải là một mảng.
  • Nếu des không phải là mảng.
  • Nếu src và des là mảng của các loại dữ liệu khác nhau.

Phương pháp 2

Sử dụng

Arrays.copyOf(array,4) để sao chép 4 yếu tố đầu tiên, cắt bỏ phần còn lại.

của

Arrays.copyOfRange(array,1,5) để sao chép các yếu tố 1-4 nếu bạn cần giữa một mảng.

+0

Cảm ơn câu trả lời của bạn, nhưng đối với phương pháp cuối cùng 2, Arrays.copyOfRange (mảng, 1,5) sẽ sao chép các phần tử 1-4. Tôi không biết tại sao họ làm như vậy ... nhưng cảm ơn vì phản ứng của bạn, tôi là def. sử dụng phương pháp cuối cùng –

+0

Lỗi của tôi, số không dựa và tôi không nghĩ ... – jkschneider

2

Bạn có thể tạo mảng mới theo kích thước bạn muốn (4 trong trường hợp này), sau đó sử dụng System.arrayCopy để sao chép nội dung từ mảng này sang mảng khác.

9
int[] newArray = Arrays.copyOf(array,4); 
2

Bạn có thể sử dụng copyOfRange cho mục đích này, Sao chép phạm vi được chỉ định của mảng được chỉ định vào một mảng mới.

copyOfRange(byte[] original, 
       int from, 
       int to) 

Tham số:

gốc - mảng mà từ đó hàng loạt là để được sao chép

từ - chỉ số ban đầu của dãy núi này được sao chép, bao gồm

đến - chỉ mục cuối cùng của dải ô cần được sao chép, độc quyền. (Chỉ mục này có thể nằm ngoài mảng.)

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