jpking72
asked on
removing members from an ArrayList
i am adding an object "pnew" to a queue (which i am implementing as an arrayList--same thing right?) after I add it i need to back up a step so I have a "remove" method which takes off the last element in "pnew". The problem is that when I remove the member from "pnew", it also removes it from the queue. The queue is an ArrayList of paths, pnew is an ArrayList of integers
path pnew = new path(start);
ArrayList<path> queue = new ArrayList<path>();
queue.add(pnew);
pnew.remove();
path pnew = new path(start);
ArrayList<path> queue = new ArrayList<path>();
queue.add(pnew);
pnew.remove();
ASKER
========================== ========== ========== ======
int source = this.findNode(a);
int sink = this.findNode(b);
curr.add(source);
path p = new path(curr);
queue.add(p);
for (int row = 0; row < nodes.length; row++) {
path pnew = queue.remove(0);
for (int col = 0; col < nodes.length; col++) {
if (matrixCap[row][col] != 0) {
pnew.add(col);
if (pnew.contains(sink))
System.out.println(queue.t oString()) ;
queue.add(pnew);
pnew.remove();
}
}
}
========================== ========== ====
class path
========================== ========== ====
public class path {
private ArrayList<Integer> in = new ArrayList<Integer>();
/** Creates a new instance of path */
public path(ArrayList<Integer> i) {
for (int j = 0; j < i.size(); j ++) {
in.add(j, i.get(j));
}
}
public ArrayList<Integer> add(Integer i) {
in.add(i);
return in;
}
public ArrayList<Integer> remove() {
if (in.size() >0){
in.remove(in.size()-1);
return in;}
else return in;
}
public boolean contains(int sink) {
for (int i = 0; i < in.size(); i++) {
if (in.get(i).equals(sink))
return true;
}
return false;
}
public String toString() {
StringBuilder out = new StringBuilder();
out.append("found path: ");
for (int i = 0; i < in.size(); i++) {
out.append(in.get(i));
out.append(" ");
}
return out.toString();
}
}
int source = this.findNode(a);
int sink = this.findNode(b);
curr.add(source);
path p = new path(curr);
queue.add(p);
for (int row = 0; row < nodes.length; row++) {
path pnew = queue.remove(0);
for (int col = 0; col < nodes.length; col++) {
if (matrixCap[row][col] != 0) {
pnew.add(col);
if (pnew.contains(sink))
System.out.println(queue.t
queue.add(pnew);
pnew.remove();
}
}
}
==========================
class path
==========================
public class path {
private ArrayList<Integer> in = new ArrayList<Integer>();
/** Creates a new instance of path */
public path(ArrayList<Integer> i) {
for (int j = 0; j < i.size(); j ++) {
in.add(j, i.get(j));
}
}
public ArrayList<Integer> add(Integer i) {
in.add(i);
return in;
}
public ArrayList<Integer> remove() {
if (in.size() >0){
in.remove(in.size()-1);
return in;}
else return in;
}
public boolean contains(int sink) {
for (int i = 0; i < in.size(); i++) {
if (in.get(i).equals(sink))
return true;
}
return false;
}
public String toString() {
StringBuilder out = new StringBuilder();
out.append("found path: ");
for (int i = 0; i < in.size(); i++) {
out.append(in.get(i));
out.append(" ");
}
return out.toString();
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
i don't understand...i rewrote the code and still the same problem:
when I update current[i], queue also changes the previous entry in the ArrayList. I want it to add another distinct array to the end of the ArrayList every time.
ArrayList<int[]> queue = new ArrayList<int[]>();
int[] current = new int[10];
for (col = 0; col<nodes.length; col++) {
current[i] = col;
queue.add(current)
}
when I update current[i], queue also changes the previous entry in the ArrayList. I want it to add another distinct array to the end of the ArrayList every time.
ArrayList<int[]> queue = new ArrayList<int[]>();
int[] current = new int[10];
for (col = 0; col<nodes.length; col++) {
current[i] = col;
queue.add(current)
}
ASKER
hello?
If path holds Integers, maybe even the array list should be of Integers
ArrayList <Integer> queue = new ArrayList <Integer> () ;
>> hello?
Be patient - I come here in my free time and our time zones could also be different. Any reason for the C grade?
ArrayList <Integer> queue = new ArrayList <Integer> () ;
>> hello?
Be patient - I come here in my free time and our time zones could also be different. Any reason for the C grade?
You mean the ArrayList implements a queue? It can....
Though it looks like you have:
/* Queue --> */ path pnew = new path(start);
/* ArrayList --> */ ArrayList<path> queue = new ArrayList<path>(); // also named as 'queue' ?
>> pnew.remove();
We need to know what is the implementation of the path class and what it does.