Как проверить, существует ли элемент в массиве в Java

StackOverflow https://stackoverflow.com/questions/622628

  •  05-07-2019
  •  | 
  •  

Вопрос

Если у меня есть int массив структурирован следующим образом:

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

И я пытаюсь восстановить

map[100][200]

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

Это было полезно?

Решение

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

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

Другие советы

Я не вернусь null, потому что int - это примитивный тип. Он вернет значение по умолчанию 0, которое равно <=>.

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

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

Нет.

Элементы вашего массива достаточно велики, чтобы вместить их. intс, в данном случае.Негде хранить информацию о том, «существует» ли элемент.Его выделили, значит, он существует.В Java недавно выделенный int массивы будут инициализированы нулями для всех элементов.

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top