Динамический массив целых чисел

97
03 мая 2021, 23:40

Спроектируйте класс Array.

Массив должен обладать двумя свойствами:

   public int size
   public int [] data

В классе Array должен быть реализован метод:

   public void add(int element)

Данный метод должен помещать новый элемент в конец массива, а длину массива увеличивать на 1.

В случае переполнения - необходимо увеличить длину массива data (необходимо выделить новый кусок большей длины, и скопировать в него данные, добавленные в data на предыдущих шагах)

Проверка класса осуществляется следующим способом:

  Создается экземпляр класса inst
  Случайным образом формируется число N от 1 до 105
  Случайные числа от 1 до 100 - N раз добавляются добавляются в массив методом add
  Проверяется inst.size, inst.data[i], для i от 0 до N-1

Задача с одной стороны простая, но я запутался.

Насчет мейна и написанного в нем инстанса, где будет проходить проверка, все вроде просто:

Инстанс:

Array inst = new Array() ;
int r = случайное число;
inst.add(r);
System.out.println (inst.size) ;
System.out.println (inst.data[0]);

А вот что в классе Array написать, я не соображаю.

public class Array {
    public int size;
    public int[] data;
    public void add(int element) {
        int[] r = {1,2,3};
        r = Arrays.copyOf(r, r.length + 1);
    }
}

Естественно, это у меня не работает, хотя, как еще изменить размер массива, я не соображаю.

Попробовал так:

class Array{
    public int size;
    public int [] data;
    public void add(int element){
         if(size == data.length-1)
            Arrays.copyOf(data, data.length*2);
        data[size++] = element;
    }
}

Но все равно не проходит: вываливается NullPointerException.

Answer 1
public class Array {
    public int size = 0;
    public int [] data = new int[0];
    public void add(int element) {
        data = Arrays.copyOf(data, size + 1);
        data[size] = element;
        size++;
    }
}

Если хотите, можете ввести начальный размер массива и проверять, переполнится ли он:

public int size = 0;
public int [] data = new int[10];
public void add(int element) {
    if(size == data.length)
        data = Arrays.copyOf(data, size + 1);
    data[size] = element;
    size++;
}
READ ALSO
Синхронизация папки GoogleDrive

Синхронизация папки GoogleDrive

GoogleDrive для ПК умеет синхронизировать определённую папку, можно ли это настроить как-то на Андроиде? Если да, то было бы отлично сделать это...

87
Java Timer. Отсчет времени после старта потока

Java Timer. Отсчет времени после старта потока

Я использую Timer и устанавливаю таймер через метод shedule(), задавая повтор каждые N секундНо столкнулся с проблемой, мне необходимо запускать...

87
Как запустить несколько проектов на Eclipse?

Как запустить несколько проектов на Eclipse?

Мне необходимо запустить сразу несколько разных проекта на эклипсе, как это можно сделать?

107
Не запускается logstash

Не запускается logstash

Установил logstash по инструкции с оф сайта под windows https://wwwelastic

123