1

したがって、このプログラムの私の目標は、文字列とをArrayListパラメーターとして受け取るメソッドを作成することです。このメソッドは、文字列をに追加しArrayList、すべてをアルファベット順に並べて、文字列を含むアルファベット順に返しArrayListます。

私が問題を抱えている行はalphabetized.get(x) = arr.get(x);

値 x を認識しないため、プログラムはコンパイルされませんが、for ループの前の方で述べているため、なぜ実行されないのかよくわかりません...

public class TestArrays {
    static Scanner reader = new Scanner(System.in);

    public static void main(String[] args) {    
        String pat;

        ArrayList<String> names = new ArrayList<String>();
        names.add("anna");
        names.add("bob");
        names.add("matthew");
        names.add("charles");
        names.add("effron");
        System.out.print(newArray(names, pat));
    }

    public static ArrayList<String> newArray(ArrayList<String> arr, String str) {
        List<String> alphabetized = new ArrayList<String>(arr.size());
        arr.add(str);
        java.util.Collections.sort(arr);
        for (int x=0; x<=arr.size();x++){
            alphabetized.get(x) = arr.get(x);
        }
        return alphabetized;
    }
}

ありがとう

4

3 に答える 3

5

問題は、式alphabetized.get(x)が変数ではなく値であるため、何も代入できないことです。これは、変数として機能する配列アクセス式とは対照的alphabetizedArray[x] = array[x];です。

インデックスとそのインデックスの新しい値を取るsetメソッドが必要です。

alphabetized.set(x, arr.get(x));
于 2015-04-20T19:11:03.953 に答える
2

いくつかのこと。

まず、newArray メソッドでは、元の ArrayList を変更したくない場合を除き、コピーを作成してそのコピーを返す必要はありません。

static Scanner reader = new Scanner(System.in);

public static void main(String[] args) {    
    String pat = reader.nextLine();

    ArrayList<String> names = new ArrayList<String>();
    names.add("anna");
    names.add("bob");
    names.add("matthew");
    names.add("charles");
    names.add("effron");
    System.out.print(newArray(names, pat));
}

public static ArrayList<String> newArray(ArrayList<String> arr, String str) {
    ArrayList<String> alphabetized = new ArrayList<String>(arr.size());
    arr.add(str);
    java.util.Collections.sort(arr);

    return arr;
    //for (int x=0; x<arr.size();x++){
    //    alphabetized.add(arr.get(x));
    //}
    //return alphabetized;
}

結果:

ここに画像の説明を入力

第 2 に、別の配列にコピーする場合は、このコード行を理解してください。

    ArrayList<String> alphabetized = new ArrayList<String>(arr.size());

リストを作成しました。これは、実際の要素を内部に含まない、渡した配列と同じサイズの容量を持つリストです。他のリストと同様に、リストに追加する必要があります。サイズが容量よりも大きくなる要素を追加すると、新しいアイテムを保持するために新しいメモリが自動的に割り当てられます。

編集

コピーするための for ループは、

for (int x = 0; x < arr.size(); x++)

それ以外の

for (int x = 0; x <= arr.size(); i++)

元の for ループは、元の配列から最大インデックス値を超える項目を取得しようとするため、IndexOutOfBounds 例外を引き起こします。10 個のアイテム リストのサイズは 10 になりますが、インデックスは 0 ~ 9 になります。元の for ループは、存在しないインデックス 10 を取得しようとします。

static Scanner reader = new Scanner(System.in);

public static void main(String[] args) {    
    String pat = reader.nextLine();

    ArrayList<String> names = new ArrayList<String>();
    names.add("anna");
    names.add("bob");
    names.add("matthew");
    names.add("charles");
    names.add("effron");
    System.out.print(newArray(names, pat));
}

public static ArrayList<String> newArray(ArrayList<String> arr, String str) {
    ArrayList<String> alphabetized = new ArrayList<String>(arr.size());
    arr.add(str);
    java.util.Collections.sort(arr);
    for (int x=0; x<arr.size();x++){
        alphabetized.add(arr.get(x));
    }
    return alphabetized;
}

結果:

ここに画像の説明を入力

于 2015-04-20T19:35:38.393 に答える