Почему я получаю неправильный 0 индекс стоимости? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь узнать, как динамически добавлять данные в список, но у меня возникла проблема. Почему я получаю неправильный индекс значения 0. Когда я пытаюсь добавить значение позиции индекса.

import java.util.*;
public class MyList{
    String[] mList = null;
    int pointer;

    public MyList(){
        mList = new String[pointer];
    }

    public void add(String aStringValue){
        System.out.println("add: "+pointer+ " " +aStringValue+ " "+mList.length);
        if (pointer < mList.length-1) {
            System.out.println(pointer+ " " +aStringValue);
            mList[pointer] = aStringValue;
            pointer++;      
        }else{
            System.out.println("New List:");
            String[] lStringList = new String[mList.length + 20];
            System.arraycopy(mList, 0, lStringList, 0, mList.length);
            mList = lStringList;
            System.out.println("New List: "+mList.length);
        }
    }

    public int size(){
        int size = 0;
        for (int i = 0;i<mList.length;i++) {
            if (mList[i] == null) {
                return size;
            }else{
                size++;
            }
        }
        return size;
    }

    public String get(int index){
        return mList[index];
    }
}

public class ListSize{
    public static void main(String[] args){
        MyList lList = new MyList();
        lList.add("Amit");
        lList.add("Deepak");
        lList.add("Vishal");
        lList.add("hello");
        lList.add("abc");
        lList.add("rahul");
        lList.add("ajit");
        lList.add("durgesh");
        lList.add("a");
        lList.add("b");
        lList.add("c");
        lList.add("d");
        lList.add("e");
        System.out.println("MyList is: "+lList.size());
        for (int i = 0; i<lList.size(); i++) {
            System.out.println(lList.get(i));
        }
    }
}

Я ожидаю выхода Амит, Дипак, но фактический вывод - Дипак, Вишал

Ответы [ 2 ]

0 голосов
/ 11 января 2019

В вашем методе add, если в массиве нет места для строки, которую вы хотите добавить, вы создаете новый и больший массив, но не добавляете строку в новый массив.

Я считаю, что код в части if вашего оператора if должен идти после оператора if.

0 голосов
/ 11 января 2019

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

public void add(String aStringValue) {
    // ensure capacity.
    if (pointer == mList.length)
        mList = Arrays.copyOf(mList, mList.length + 20);

    mList[pointer++] = aStringValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...