Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Удаление элемента массива |
Автор: 00100 17.10.2008, 19:59 |
Здравствуйте! Есть массив double[][] masA = new double[2][5]; Вопрос заключается в том что когда я сравниваю элементы массива то мне необходимо удалять строки массива (или элемент), но как это сделать я не пойму если я присваиваю элементу null, то пишет что ошибка. |
Автор: mbasil 17.10.2008, 20:06 |
Вы не можете присвоить примитивной переменной (а элемент вашего массива это примитив) null значение. В таком случае надо либо присвоить какое-либо незначащее значение с точки зрения приложения значение. Но если вам задачу поставил преподаватель, он скорее всего имел в виду, что вы при удалении сдвините весь хвост массива для того, чтобы этот элемент просто исчез. |
Автор: 00100 17.10.2008, 20:13 | ||
Да нет преподаватель здесь не причем ![]() |
Автор: mbasil 17.10.2008, 20:24 |
Значит надо сдвигать хвост массива. Может в этой ситуации лучше использовать коллекции, например Set, не вставляет дубликаты. |
Автор: 00100 17.10.2008, 21:49 | ||||
вот смотрите
из массива допустим я удалил 2 элемент но как мне теперь его длину уменьшить? |
Автор: duk 17.10.2008, 22:38 |
Посмотри ArrayList, там есть все эти штуки |
Автор: biguser 17.10.2008, 23:22 |
массивы задаются фиксированным размером изначально и нельзя потом менять его размер. тут надо ввести какое нибудь значение которое будет означать что этот элемент удален. например если вы знаете что массив точно состоит из натуральных чисел, то любое отрицательное число будет свидетельствовать о том что элемент не доступен. если надо сделать всё таки такую возможность нужно использовать уже List->ArrayList и т.д. |
Автор: Keyo 18.10.2008, 03:30 |
наверное лучше связанный список LinkedList |
Автор: Dims 18.10.2008, 13:15 | ||
Чё-то я не понял. Одномногомерный массив -- это массив массивов. На самом последнем уровне у нас конечный тип, если он не ссылочный, то ему, конечно, null присвоить нельзя. Ну а не на конечном уровне тип ссылочный -- массив меньшей размерности. Ему вполне можно присвоить null. Вот такой код
выдаёт вот это 0: 0,1,2,3,4 1: null То есть, строка совершенно нормально удалилась. Отсюда напрашивается решение (если есть желание убивать строки и элементы присваиванием null) -- добавить ещё одну размерность длины 1. double[][][] masA = new double[2][5][1]; чтобы обратиться к элементу 1-0 надо будет писать masA[1][0][0] то есть, всегда добавлять в конце [0]. |
Автор: Temdegon 18.10.2008, 16:13 |
А почему нельзя просто использовать классы-обертки для примитивных типов? Испоьзуй Integer вместо int. Тем более начиная с 5-й Java работать с ними удобно блягодаря autoBoxing. |
Автор: dorogoyIV 18.10.2008, 16:52 | ||
кажется все забыли про:
![]() |
Автор: 00100 19.10.2008, 01:28 |
dorogoyIV, Temdegon, Dims, Keyo, biguser, duk Спасибо Вам всем огромное! Реализовал я через спски и просто удалением и смещением массива все понял, вопрос закрыт... p.s. новые вопросы обязательно будут ![]() |
Автор: Исполнитель234 15.12.2009, 12:41 | ||
Помогите найти идеальную реализацию. Задачка такова: нужно удалить все потонувшие лодки
Можно ли так удалять элементы? Или можно оптимизировать как-то? В интернете гуглил, нашел что в векторе элементы перенумеровываются сразу после удаления Стало быть вектор использовать нельзя, нужен линкед лист? |