为什么我弄错了0的价值指数?

时间:2019-01-11 13:37:56

标签: java arrays list

我正在尝试学习如何将数据动态添加到列表中,但是我遇到了问题。 为什么每次尝试添加索引的值位置时,我都会得到错误的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));
        }
    }
}

我希望Amit Deepak的输出,但实际输出是Deepak vishal

2 个答案:

答案 0 :(得分:0)

创建新数组时,不添加任何内容。我建议您始终检查大小是否正常,然后再添加元素。如果您想清楚地看到这一点,建议您逐步调试程序中的代码。

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

    mList[pointer++] = aStringValue;
}

答案 1 :(得分:0)

在您的add方法中,如果数组没有足够的空间容纳要添加的字符串,则您将创建一个更大的新数组,而不是将字符串添加到新数组中。

我相信if语句的if部分中的代码应该放在if语句之后。