Java Array Stack Реализация преобразования строк и роста - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь реализовать стек, используя массивы и строковые буферы. Что меня смущает, так это то, как правильно определить размер моей строки без кластеризации элементов массива в строке. Grow должен удвоить емкость моего буфера (что я пытался реализовать с помощью verifycapacity). Для преобразования я добавляю элементы из массива в буфер, но, как уже упоминалось, теперь знаю, как это сделать, не теряя реального значения элементов моего массива.

    public class Stack {
    private int[] buffer;
    private int size;

    public Stack(int capacity) {
        //TODO
        buffer = new int [capacity];
        size =0;
    }
    public String toString() {
        StringBuffer converter = new StringBuffer();  //initializing buffer
        int i=0; //
        while(i<=size) { //while loop let's us append the elements of the array into our stringbuffer
            converter.append(buffer[i]+ " ");
        }
            String wanted = converter.toString(); //converting the buffer to a string
            return wanted; 
        } 

    private void grow() {
        //TODO
        StringBuffer doubler = new StringBuffer();
        doubler.append(toString()); //adding our string into the new buffer
        int l = doubler.length();
        doubler.ensureCapacity(l-1); //ensure capacity(if the min argument is smaller than the actual capacity)
    }                                //will take 2*min arg +2 as new capacity
}

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Не уверен, что делает ваша grow функция, но если вы хотите увеличить размер вашего buffer, вам нужно создать новый массив - поскольку массивы не могут быть изменены, - и скопировать старые данные в новые. ,Затем переназначьте буфер новому массиву:

private void grow() {
    int [] temp = new int[buffer.length * 2];
    for (int i = 0; i < size; i++) {
        temp[i] = buffer[i];
    }
    buffer = temp;
}
0 голосов
/ 24 октября 2019

Нет необходимости использовать StringBuffer в методе grow().

В методе grow() создайте временный массив с емкостью 2*buffer.length, выполните итерации по buffer и скопируйте элемент в временный массив, обновите buffer с помощью временного массива.

...