Как написать публичный метод удаления void в 2D массив? - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть 2D-массив, который содержит строки в виде букв, начинающихся с A, идет в строку 0 , а из B - в строку 1 и т. Д. Мы можем использовать charAt метод и ASCII-значение для A составляет 65 , а B - 66 и так далее. Это метод, который принимает аргумент String , а удаляет параметр из соответствующей строки, а также удаляет всю строку структуры. Единственное, что не так в следующем коде - это метод удаления.

public AlphaList() {
    this.list=new String[26][];
    for (int row=0; row<this.list.length; row++) {
        list[row]=new String[0];
    }
}

public void insert(String value) {
    int firstChar=(int) value.charAt(0)-65;
    String[] newList=new String[list[firstChar].length+1];
    newList[newList.length-1]=value;
    for(int i=0; i<list[firstChar].length;i++){
        newList[i]=list[firstChar][i];
    }
    list[firstChar]=newList;}


public void remove(String value) {
    int firstChar=(int) value.charAt(0)-65;
    String[] newList=new String[list[firstChar].length-1];
    newList[newList.length-1]=value;
    for(int i=0; i<list[firstChar-1].length;i++){
        newList[i]=list[firstChar-1][i];
    }
    list[firstChar]=newList;
}

1 Ответ

0 голосов
/ 22 апреля 2011

В соответствии с кодом функции вы удаляете последние два элемента и сохраняете аргумент функции в последней ячейке.Вам нужно написать функцию, которая найдет индекс сохраненного параметра (если он существует) и использует этот код для удаления его из массива:

public void remove(String value) {
    int firstChar=(int) value.charAt(0)-65;
    int index = FindIndex(list[firstChar],value); // Function that return the index of value
    String[] newList=new String[list[firstChar].length-1];

    for(int i=0; i<index ;i++)
        newList[i]=list[firstChar-1][i];

    for(int i=index; i<list[firstChar-1].length;i++)
        newList[i]=list[firstChar-1][i+1];

    list[firstChar]=newList;
}
...