Хобрук: Ваш путь к мастерству в программировании

Небезопасные или непроверенные операции для ArrayList

Мне поручили написать программу, которая получает 100 случайных целых чисел от 0 до 25 и сохраняет их в массиве. Затем мне нужно вызвать 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]);

Пожалуйста, помогите мне с этим, я старался изо всех сил, чтобы сделать его ясным и легким для понимания.



Ответы:


1

Это потому, что вы используете ArrayList с raw type. И вы добавляете к нему определенный тип.

Необработанный тип ArrayList ожидает элемент типа Object. Если вы добавите любой другой тип, то компилятор не будет точно знать, какой тип вы сохраняете. Таким образом, он дает вам unchecked or unsafe operations предупреждение о том, что вы, возможно, делаете что-то не так.

Вам лучше создать Generic ArrayList: -

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

Также измените его в своей method подписи: -

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

PS: – У вас всегда должна быть ссылка interface type, если она у вас есть. Я имею в виду использование List вместо ArrayList

18.10.2012
  • Спасибо, я все еще относительно новичок в java и особенно в ArrayLists и списках Еще раз большое спасибо! 19.10.2012
  • @ Тимо.. Не за что. И не волнуйтесь. Вы будете получать вещи постепенно, когда будете больше практиковаться. 19.10.2012

  • 2

    Он жалуется на это

    ArrayList even = new ArrayList(1);
    

    у вас есть неуниверсальная версия ArrayList. Измените его на

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

    Это общий и безопасный тип.

    Также (в качестве примечания) значение 1 в new ArrayList(1); указывает начальную емкость списка. Эта функция предназначена для ситуаций, когда вы знаете, что будете добавлять в список огромное количество элементов, и в этом случае вы должны указать большее число, что поможет избежать накладных расходов на изменение размера. Передача небольшого значения (например, 1) не имеет смысла.

    18.10.2012
  • И тебе спасибо! У меня еще нет возможности проголосовать (недостаточно репутации), но я ценю ваш ответ! 19.10.2012

  • 3

    Вместо этого:

    ArrayList even = new ArrayList(1);
    

    попробуй это:

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

    Вот преимущества:

    • Этот List может содержать только числа (на самом деле целые числа, также известные как целые числа), из которых, как я предполагаю, исходит предупреждение.
    • у него есть имя во множественном числе, которое лучше отражает, что это такое, список
    • Он создает сам себя с размером 50 (а не 1), что примерно соответствует ожидаемому размеру.
    18.10.2012

    4

    Замените это ArrayList even = new ArrayList(1); на ArrayList<Integer> even = new ArrayList<Integer>(1);

    Или добавьте @SuppressWarnings("rawtypes") в начало атрибута/метода/класса.

    18.10.2012
  • Я пробовал что-то подобное, но это не сработало, но теперь все в порядке! Я понял. Спасибо! 19.10.2012
  • Новые материалы

    Как ИИ меняет сельское хозяйство
    Прочтите Статью Кэтлин Уолч в Forbes о том, как ИИ меняет сельское хозяйство . Сельское хозяйство и земледелие - одна из древнейших и важнейших профессий в мире. Человечество прошло долгий..

    Slack: проектирование современных интерфейсов человека и ИИ
    Когда Стюарт Баттерфилд выделил Slack из быстро исчезающей онлайн-игры Tiny Speck, его перспективы были в лучшем случае неопределенными. Существовал очевидный спрос на средства связи на рабочем..

    HTTP1.1 против HTTP2
    Http расшифровывается как HyperText Transfer Protocol, это в основном метод, который компьютеры и серверы используют для запроса и отправки информации. HTTP1.1 - это более старая версия Http, а..

    Радость вырезания
    Радость фрагментов По какой-то причине, когда я начал программировать в колледже, я активно сопротивлялся целому ряду земных благ, которые сделали бы мою жизнь чуточку удобнее. Я в основном..

    Создайте стройный слайдер с нуля без каких-либо внешних инструментов
    Слишком долго я полагался на сторонние плагины и инструменты для простых слайдеров. Пока в один прекрасный день в моей крошечной голове не загорелась лампочка, которую я могу сделать..

    Буферы протоколов, часть 01: соглашения об именах и файловая организация
    Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!

    Наши партнеры
    Globex SCI — уникальная система, которая хранит и позволяет использовать большие базы данных, опубликованные в блокчейне. Используя алгоритмы глубокого обучения и ИИ, мы можем прогнозировать..