Как проверить, существует ли элемент в массиве в Java - PullRequest
5 голосов
/ 08 марта 2009

Если у меня массив int, структурированный так:

private int[][] map = new int[400][400];

И я пытаюсь получить

map[100][200]

И этот элемент не инициализирован, получу ли я ошибку компилятора / среды выполнения или он вернет ноль? И есть ли какая-нибудь функция, чтобы проверить, существует ли данный элемент / индекс / был ли установлен?

Ответы [ 6 ]

11 голосов
/ 08 марта 2009

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

Если бы ваш массив был массивом Объектов, то массив содержал бы null для любого элемента, который не был специально назначен.

3 голосов
/ 08 марта 2009

Я не вернусь null, потому что int является примитивным типом. Он вернет значение по умолчанию int, которое равно 0.

Нет способа узнать, был ли установлен какой-либо элемент, если не считать отдельный логический массив.

2 голосов
/ 08 марта 2009

В Java только ссылочные переменные инициализируются нулем. Примитивы гарантированно возвращают соответствующие значения по умолчанию . Для целых это значение равно 0.

1 голос
/ 08 марта 2009

номер

В этом случае элементы массива достаточно велики, чтобы вместить int с. Нет места для хранения информации о том, существует ли элемент. Он был выделен, таким образом, он существует. В Java вновь распределенные массивы int будут инициализированы для всех нулевых элементов.

0 голосов
/ 22 марта 2011

Немного о мертвой теме, но я нашел ее случайно, поэтому я собираюсь поместить свой кусок мудрости (или что-то еще: P). Вы можете использовать Arrays.Fill для заполнения массива, когда он создан с недопустимым значением, таким как -1. Затем вы можете легко выполнить if x <0, чтобы проверить, инициализировали ли вы эту конкретную позицию массива или нет. Просто идея ... </p>

0 голосов
/ 08 марта 2009

Вы можете использовать checkstyle , pmd и findbugs в вашем источнике (findbugs в двоичном файле), и они сообщат вам подобные вещи.

К сожалению, не похоже, что они улавливают эту конкретную проблему (что имеет смысл, что для массива гарантированно установлен каждый элемент 0, ноль или ложь).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...