我需要为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;后面的列表回到列表。有人可以帮忙吗?
答案 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++;