0

Aから始まる文字が行0に行き、Bから始まる文字が行1に行くなどの文字列を含む2D配列があります。charAtメソッドを使用でき AのASCII値は65Bは66などです。文字列の引数を取り、対応する行からパラメータを削除し、構造体の行全体も削除するメソッドです。次のコードで間違っているのは、removeメソッドだけです。

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;
}
4

1 に答える 1

0

関数のコードによると、最後の 2 つの要素を削除し、関数の引数を最後のセルに保存します。格納されたパラメーターのインデックスを検索する関数を作成し (存在する場合)、次のコードを使用して配列から削除する必要があります。

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;
}
于 2011-04-22T00:20:49.947 に答える