7

我被分配制作一个程序,该程序可以获取 0-25 之间的 100 个随机整数并将它们存储在一个数组中。然后我必须调用 2 种方法来分割偶数和赔率(非常典型)。所以我尝试了 ArrayList 的东西(我刚刚学会了),它看起来很好(我在网上关注教程和东西),直到我遇到这个: Unit8.java 使用未经检查或不安全的操作

我的代码是这样的:

    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

这是因为您正在使用ArrayListwith raw type。你正在向它添加一个特定的类型。

原始类型 ArrayList 需要 Object 类型的元素。如果您添加任何其他类型,那么编译器将无法确切知道您存储的是什么类型。因此,它unchecked or unsafe operations可以警告您您可能做错了什么。

您应该更好地创建一个GenericArrayList:-

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);

那是通用的和类型安全的。

此外(作为旁注)值 1 innew ArrayList(1);指定列表的初始容量。该功能适用​​于您知道将向列表添加大量元素的情况,在这种情况下,您将提供一些更大的数字,这将有助于避免调整大小的开销。传递一个小值(如 1)没有意义。

于 2012-10-18T05:41:17.180 回答
1

而不是这个:

ArrayList even = new ArrayList(1);

试试这个:

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

以下是优点:

  • List只能保存数字(实际上是整数,也称为整数),我假设这是警告的来源。
  • 它有一个复数名称,可以更好地反映它是什么,一个列表
  • 它以 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 回答