7

私は、0 から 25 までのランダムな整数を 100 個取得し、それらを配列に格納するプログラムを作成するように割り当てられています。次に、偶数とオッズを分割するために 2 つのメソッドを呼び出す必要があります (非常に典型的です)。だから私はArrayListのことを試しました(私はそれを学びました)そして、これに遭遇するまでは問題ないようでした(チュートリアルとオンラインのものに従っていました): Unit8.java uses unchecked or unsafe operations

私のコードはこれです:

    import java.util.*;
    import java.awt.*;

    public class Unit8
    {
public static void main (String [] args)
{
    //create an array for original 100 integers
    //create a 2D array for evens and odds
    //split them up using 2 methods

    int[] originalArray = new int[100];
    ArrayList even = new ArrayList(1);
    ArrayList odd = new ArrayList(1);

    for (int x = 0; x < originalArray.length; x++)
    {
        originalArray[x] = (int)(Math.random() * 25);
    }

    evensDivider(originalArray, even);
    oddsDivider(originalArray, odd);
}

public static void evensDivider (int[] e, ArrayList even)
{


    for (int y = 0; y < e.length; y++)
    {
        if (e[y]%2 == 0)
            even.add(e[y]);
    }

    System.out.println("The evens are: " + even);
}

public static void oddsDivider (int[] o, ArrayList odd)
{


    for (int z = 0; z < o.length; z++)
    {
        if (o[z]%2 == 1)
            odd.add(o[z]);
    }
}

}

具体的には次の場所でエラーが発生しています: even.add(e[y]); および odd.add(o[z]);

これで私を助けてください、私はそれを明確で理解しやすいように最善を尽くしました.

4

4 に答える 4

14

これは、 を使用ArrayListしているためですraw type。そして、それに特定のタイプを追加しています。

Raw タイプ ArrayList は、タイプ Object の要素を期待します。他の型を追加すると、Compiler は格納している型を正確に認識できなくなります。したがって、unchecked or unsafe operations何か間違ったことをしている可能性があることを警告することができます。

ArrayListを作成することをお勧めしGenericます:-

List<Integer> evenNumbers = new ArrayList<Integer>();

また、method署名でそれを変更してください: -

public static void evensDivider (int[] e, List<Integer> evenNumbers)

PS : - 参照がある場合は常に参照する必要がありinterface typeます。List代わりに使用することを意味しますArrayList

于 2012-10-18T05:41:38.163 に答える
3

これについては文句です

ArrayList even = new ArrayList(1);

あなたはそこの非一般的なバージョンを持っていますArrayList。に変更します

List<Integer> even = new ArrayList<Integer>(1);

これはジェネリックでタイプセーフです。

また、(補足として) の値 1new ArrayList(1);は、リストの初期容量を指定します。この機能は、膨大な数の要素をリストに追加することがわかっている状況で使用できます。その場合、より大きな数を指定すると、サイズ変更のオーバーヘッドを回避するのに役立ちます。小さな値 (1 など) を渡すことは意味がありません。

于 2012-10-18T05:41:17.180 に答える
1

これの代わりに:

ArrayList even = new ArrayList(1);

これを試して:

List<Integer> evens = new ArrayList<Integer>(50);

利点は次のとおりです。

  • これListは数値 (整数、実際には int とも呼ばれます) のみを保持できます。これが警告の原因であると想定しています。
  • それが何であるかをよりよく反映する複数形の名前、リストを持っています
  • 50 (1 ではなく) のサイズでインスタンス化されます。これは、予想されるサイズとほぼ同じです。
于 2012-10-18T05:42:21.087 に答える
1

これArrayList even = new ArrayList(1);ArrayList<Integer> even = new ArrayList<Integer>(1);

または、属性/メソッド/クラスの上に追加します。@SuppressWarnings("rawtypes")

于 2012-10-18T05:44:45.020 に答える