2014-09-29 2 views
0

Я работаю над проектом, который создает массив объектов (аппаратных средств) из класса I, который называется ToolItem. Он смотрит на такие:Удаление и перемещение объектов в массиве

private ToolItem[] toolArray = new ToolItem[10];

for (int i = 0; i < toolArray.length; i++) 
     { 
      toolArray[i] = new ToolItem(); 
      System.out.println(toolArray[i]); 
     } 

Текущий класс я работаю, называется ToolWarehouse, предназначен для обработки данных с использованием методов, таких как вставка, поиск, удаление ЭСТ. При создании метода удаления нам будет предложено выполнить поиск уникального идентификатора, и если он совпадает, установите для всех членов данных значение 0. После этого нам будет предложено удалить член массива и сдвинуть все влево. Инструкции о том, как сдвинуть массив никогда не учил/упоминалось, так что я сделал некоторое рытье и придумал это:

public void delete(int ID) 
    { 
     testArray = searchArray(ID); //method used to search array for specified ID 

     for (index = 0; index < toolArray.length; index++) 
     { 
      if (testArray == index)  
      { 
       toolArray[index].setQuality(0); 
       toolArray[index].setToolName(""); 
       toolArray[index].setID(0); 
       toolArray[index].setNumberInStock(0); 
       toolArray[index].setPrice(0.0); 

       System.arraycopy(toolArray, 1, toolArray, 0, toolArray.length - 1); 

       numberOfItems--; 
      } 
     } 
    }//end delete 

Вот searchArray:

public int searchArray(int id) 
    { 
     for (index = 0; index < toolArray.length; index++) 
     { 
      if (toolArray[index].getToolID() == id) 
      { 
       System.out.println("ID found at location " + index); 
       return index; 
      } 
     } 
     return -1; 
    }//end searchArray 

Где индекс место в массив, который в настоящее время оценивается. Теперь, есть:

System.arraycopy(toolArray, 1, toolArray, 0, toolArray.length - 1); подходит для моих целей? Я читал довольно много разных способов перемещения элементов в массиве, и это, кажется, самый простой способ сделать это, но большинство из них использовали его с массивом, который я не могу использовать прямо сейчас. Любая обратная связь очень ценится. Благодаря!

+0

Просьба указать типы 'index',' testArray' и 'toolArray' как минимум. Мы можем выводить типы, но ваш вопрос не содержит проверяемого примера. См. Http://stackoverflow.com/help/mcve. – Krumia

ответ

1

Нет, arrayCopy не подходит. Обратите внимание, что вы копируете toolArray.length - 1 элементов, и я не уверен, как вы не сталкиваетесь с IndexOutOfBoundException.

Предполагая, testArray, и index являются int s, и toolArray массив некоторого типа объекта, я думаю, что вы можете сделать это:

public void delete(int ID) 
{ 
    testArray = searchArray(ID); //method used to search array for specified ID 

    // do things on the element that is returned from searchArray(). 
    toolArray[testArray].setQuality(0); 
    toolArray[testArray].setToolName(""); 
    toolArray[testArray].setID(0); 
    toolArray[testArray].setNumberInStock(0); 
    toolArray[testArray].setPrice(0.0); 

    // shift the rest. 
    for (index = testArray + 1; index < toolArray.length; index++) 
    { 
     toolArray[index - 1] = toolArray[index]; 
    } 

    // now toolArray[toolArray.length - 2] and toolArray[toolArray.length - 1] 
    //points to the same object. Let's empty the last cell of the array 
    toolArray[toolArray.length - 1] = null; 
}//end delete 

Обратите внимание, что каждый раз, когда вы перемещаетесь, есть null клетки (s) в конце массива. Я думаю, вы должны рассмотреть возможность использования коллекции, которая может расти или сокращаться, например, ArrayList.

+0

Я только что закончил добавлять дополнительную информацию для вас в редактирование, но вы избили меня в этом :) Спасибо за помощь, возможно, я переусердствовал всю ситуацию. Я проверю это и посмотрю, как это происходит. – FuegoJohnson

+0

Кроме того, я не могу использовать массивList, или поверьте мне, я бы ... – FuegoJohnson

Смежные вопросы