[英]Inserting elements into array
我有一個實現接口的類,我想當我嘗試一次將元素插入數組中的次數超過一次被忘記的時候。 我真的不知道這一點。 這就是我所擁有的:
public void insertElementAt(int index, E el)
throws IllegalArgumentException {
Object temp[] = new Object[data.length + 1];
for (int i = 0; i < data.length; i++) {
if (i == index){
temp[index] = el;
temp[i + 1] = data[i];
i++;
}
temp[i] = data[i];
}
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
然后我的測試報告為null
而不是最后一次斷言。
@Test
public void testInsertToLeft() {
PriorityList<String> list = new ArrayPriorityList<String>();
list.insertElementAt(0, "First");
// Must shift array elements in this case
list.insertElementAt(0, "New First");
assertEquals("New First", list.getElementAt(0));
assertEquals("First", list.getElementAt(1));
}
您必須這樣做:
public void insertElementAt(int index, E el) throws IllegalArgumentException {
Object temp[] = new Object[data.length + 1];
for (int i = 0; i < data.length; i++) {
if (i >= index){
temp[i + 1] = data[i];
} else {
temp[i] = data[i];
}
}
temp[index] = el;
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
刪除它:
public void removeElementAt(int index) throws IllegalArgumentException {
Object temp[] = new Object[data.length - 1];
for (int i = 0; i < temp.length; i++) {
if (i > index){
temp[i - 1] = data[i];
} else {
temp[i] = data[i];
}
}
data = temp;
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
}
嘗試將for循環更改為:
for (int i = 0; i < data.length; i++) {
if (i == index){
temp[index] = el;
temp[i + 1] = data[i];
i++;
}else{
temp[i] = data[i];
}
}
要么
for (int i = 0; i < data.length; i++) {
if (i == index){
temp[index] = el;
temp[i + 1] = data[i];
i++;
continue;
}
temp[i] = data[i];
}
列表為空時什么是data.length? 如果在第一次插入時為空,則不會進入for循環,而是復制temp數組,它將在下一次插入時以長度1進入循環。將跳過第一次插入。
我會這樣做:
public static void insertElementAt(int index, E el)
throws IllegalArgumentException {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
Object temp[] = new Object[data.length + 1];
for (int i = index; i < data.length; i++) {
temp[i+1] = data[i];
}
temp[index] = el;
data = temp;
}
您應該首先對有效參數進行測試(“較早失敗”),並且可以充分利用JDK的實用程序方法為您進行提升:
public static void insertElementAt(int index, E el) {
if (index > data.length || index < 0) {
throw new IllegalArgumentException();
}
data = Arrays.copyOf(data, data.length + 1);
System.arrayCopy(data, index, data, index + 1, data.length - index);
data[index] = el;
}
還要注意,您不需要聲明throws
,因為IllegalArgumentException
是未經檢查的異常,因此我將其刪除。 通常,人們遵循這種模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.