Java ArrayList的操作不安全或未经检查

Java ArrayList的操作不安全或未经检查,java,arraylist,compiler-errors,Java,Arraylist,Compiler Errors,我被指派制作一个程序,获取100个0-25之间的随机整数,并将它们存储在一个数组中。 然后,我必须调用两种方法来分割偶数和赔率(非常典型)。 因此,我尝试了ArrayList(我只是学会了它),它看起来很好(我一直在关注教程和在线内容),直到我遇到以下情况: java使用未经检查或不安全的操作 我的代码是: import java.util.*; import java.awt.*; public class Unit8 { public static void

我被指派制作一个程序,获取100个0-25之间的随机整数,并将它们存储在一个数组中。 然后,我必须调用两种方法来分割偶数和赔率(非常典型)。 因此,我尝试了ArrayList(我只是学会了它),它看起来很好(我一直在关注教程和在线内容),直到我遇到以下情况: 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]);
    }
}
import java.util.*;
导入java.awt.*;
公共课单元8
{
公共静态void main(字符串[]args)
{
//为原始的100个整数创建一个数组
//为偶数和赔率创建二维阵列
//使用2种方法将其拆分
int[]originalArray=新int[100];
ArrayList偶数=新的ArrayList(1);
ArrayList奇数=新的ArrayList(1);
对于(int x=0;x
}

错误具体发生在:
偶数加(e[y])
odd.add(o[z])


请帮我解决这个问题,我已经尽了最大努力让它清晰易懂。

它对此表示不满

ArrayList even = new ArrayList(1);
这里有非通用版本的
ArrayList
。换成

List<Integer> even = new ArrayList<Integer>(1);
List偶数=新的ArrayList(1);
这是泛型和类型安全的


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

这是因为您将
ArrayList
原始类型一起使用。您正在向其添加特定类型

原始类型ArrayList应为Object类型的元素。若您添加任何其他类型,那个么编译器将不知道您存储的是什么类型。因此,它给您
未检查或不安全的操作
,以警告您可能做错了什么

您最好创建一个
Generic
ArrayList:-

List<Integer> evenNumbers = new ArrayList<Integer>();
PS:-如果您有接口类型的引用,则应始终具有接口类型的引用。我的意思是用
List
代替
ArrayList

而不是这个:

ArrayList even = new ArrayList(1);
试试这个:

List<Integer> evens = new ArrayList<Integer>(50);
List evens=新数组列表(50);
以下是优点:

  • 这个
    列表
    只能保存数字(实际上是整数,也称为int),我假设这就是警告的来源
  • 它有一个复数名,这更好地反映了它是什么,一个列表
  • 它以50(而不是1)的大小实例化自己,这大约是您所期望的大小

替换此
ArrayList偶数=新的ArrayList(1)
ArrayList偶数=新的ArrayList(1)


或者在属性/方法/类的顶部添加
@SuppressWarnings(“rawtypes”)

谢谢,我;我对java还是比较陌生的,尤其是ArrayList和List,再次感谢大家@提莫。。不客气。别担心。当你多练习的时候,你会慢慢得到东西的。谢谢你!我还没有投票的事情(没有足够的声誉),但我感谢你的回应!我试过这样的东西,但它跑不动,但现在没事了!我得到了它。谢谢在下面给出的链接中,更喜欢这里的答案。
List<Integer> evens = new ArrayList<Integer>(50);