Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2011, 19:58   #1
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 25.12.2010
Сообщений: 38
По умолчанию добавление элемента в массив

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

Код:
int array[];
public MyVector() 
	{
		array = new int[0];//construct a zero length array.
	}
//этот метод добавляет новый элемент в конец
public void add(int element) {
    int[] temp = new int[array.length+1];//each time i add i define a temp that's 1 larger,
		for(int i=0; i<array.length; i++){
			temp[i]=array[i];	 
		}
		temp[temp.length-1]=element;	// copy, and set the last element:
		this.array = temp;
	}
	//здесь проблема, элемент добавляется и элементы массива сдвигиваются, но последующие элементы исчезают
	
public void add(int index, int element) {
		if(index> array.length || index <0)
		{
			System.out.println("ArrayIndexOutOfBoundsException : index is out of range (index < 0 || index > size())");
		}
		int[] temp = new int[array.length];
	
		for(int i=0; i<=index; i++){
			temp[i]=array[i];	
			temp[i+1]=temp[i];
		}
		temp[index]= element;	
		this.array = temp;
	}

//Тест класс
MyVector mv = new MyVector();
mv.add(2);
mv.add(3);
mv.add(4);
mv.add(3);
mv.add(4);
mv.add(30);

mv.add(2,7);
System.out.println("My Vector: "+mv.toString());
Если до mv.add(2,7); вектор состоял из
My Vector: [2, 3, 4, 3, 4, 30]
то после
My Vector: [2, 3, 7, 4, 0, 0]
3dg_fan вне форума Ответить с цитированием
Старый 14.11.2011, 05:50   #2
it-webwork
Пользователь
 
Регистрация: 02.11.2011
Сообщений: 29
По умолчанию

Вот рабочий код ...
Код:
public void add(int index, int element) {
		if (index > array.length || index < 0) {
			System.out.println("ArrayIndexOutOfBoundsException : index is out of range (index < 0 || index > size())");
		}
		int[] temp = new int[array.length + 1]; // здесь надо было увеличить размер массива, ты же добавляешь 

 // здесь у тебя неправильное условие итератора i<=index;, отсюда и нули в окончание массива

		for (int i = 0; i < array.length; i++) {  
			if (i < index) { // если текущий элемент меньше индекса вставки
				temp[i] = array[i];  // то просто копируем
			} else { //иначе копируем с сдвигом 
				temp[i + 1] = array[i];
			}
		}
		temp[index] = element;
		this.array = temp;
	}
it-webwork вне форума Ответить с цитированием
Старый 14.11.2011, 17:12   #3
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 25.12.2010
Сообщений: 38
По умолчанию

Так вот в чем дело) Спасибо огромнейшее)
3dg_fan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление элемента в массив объектов {с++} Alt_Shift Помощь студентам 11 22.04.2011 05:43
QListWidget как реагировать на добавление элемента Farrel Qt и кроссплатформенное программирование С/С++ 3 20.04.2011 23:33
Добавление элемента в кольцевой список ForzaJuve Общие вопросы C/C++ 1 09.11.2010 19:39
Двухсвязный список, добавление элемента в указанную позицию redmonkey Помощь студентам 3 19.10.2010 12:29
добавление элемента в ComboBox Tapapax Общие вопросы .NET 2 09.11.2009 22:48