2015-04-21 23 views
1

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

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; 
} 

伪码的方法,我由是:

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++; 
     } 

使用测试类,如下所示:

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 

我不知道为什么它不会将“1”的温度数组重新添加回列表后缀。谁能帮忙?

回答

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++;