添加PositionalList的方法

时间:2015-04-21 03:33:24

标签: java arrays methods add

我需要为PositionalList创建一个add方法......它使用一个Array来存储数据。这是私有成员和构造函数:

private static int DEFAULT_CAPACITY = 10;
private Object[] items;
private int listSize;
private int curPos;
private int lastItemPos;

public FSAPositionalList(){
items = new Object[DEFAULT_CAPACITY];
listSize= 0;
curPos = 0;
lastItemPos = -1;
}

我编写的方法的Psuedo-Code是:

1。)检查数组OOB。 2.)从当前位置创建临时数组 - >列表的结尾 3.)在当前位置添加项目 4.)从curPos + 1开始重新添加临时数组中的项目。

以下是该方法的当前代码:

  public void add(Object obj){
   // Check For Out of Bounds
      if(listSize+1 > DEFAULT_CAPACITY){
          throw new RuntimeException("Too many items.");
      }else{

          //if first time then otherwise
          if(listSize == 0){
              System.out.println("Permission Granted"); 
              items[curPos] = obj;
              listSize++;
              return;
          }
          System.out.println("Access");
          // Create temp array from curPos --> end
          Object temp[] = new Object[listSize-curPos];
          //populate temp array
          int counter = 0;
          for(int i = curPos; i<listSize; i++){
              temp[counter] = items[i];
              System.out.print("Temp - " + temp[counter]);
              counter++;
          }
          System.out.println();
          // Insert obj
          items[curPos] = obj;
          System.out.println("      Temp Array: ");
          for(int i = 0; i < temp.length; i++){
              System.out.println(temp[i]);
          }
          // re-add temparray after obj
          int c = 0;
          for(int i = curPos+1; i<listSize; i ++){
              System.out.println("Replacing " + i + " " + items[i] + " with " + temp[c]);

              items[i] = temp[c];
              c++;
          }
          listSize++;
      }

使用Tester类如下:

 FSAPositionalList list = new FSAPositionalList();

        System.out.println("Adding 1");
        list.add(1);
        System.out.println("     List : " + list);
        System.out.println("Adding 2");
        list.add(2);
        System.out.println("     List : " + list);

        System.out.println("Adding 3");

        list.add(3);
        System.out.println("     List : " + list);

        System.out.println("Adding 66");
        list.next();

        list.add(66);
        System.out.println("      List : " + list);

        System.out.println(list);

我得到了这个输出:

Adding 1
Permission Granted
     List : 1 
Adding 2
Access
Temp - 1
      Temp Array: 
1
     List : 2 null 
Adding 3
Access
Temp - 2Temp - null
      Temp Array: 
2
null
Replacing 1 null with 2
     List : 3 2 null 
Adding 66
Access
Temp - 2Temp - null
      Temp Array: 
2
null
Replacing 2 null with 2
      List : 3 66 2 null 
3 66 2 null 

我不确定为什么它不会重新添加&#34; 1&#34;后面的列表回到列表。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果有人想要找到更好的解决方案:

if (isFull())
         throw new RuntimeException("The list is full");  

      for (int i = listSize - 1; i >= curPos; i--)      //Open a space in
         items[i + 1] = items[i];                                //the array
      items[curPos] = obj;                    //and insert obj in this space 

      lastItemPos = -1;      //Block remove and set until after a successful
                                                          //next or previous
      listSize++;