I'm fairly new to Java and learning Dequeue at the moment.
I have a pretty easy task, but I'm doing something wrong and would love some help on this specific task and also some tips on how to approach those kind of tasks.
I am given 2 Deques:
charDeque = [a, e, i , o , u, b] (a is head b is tail)
intDeque = [3, 6, 9] (3 is head 9 is tail).
I'm required to set an output of integers and characters from that from top to bottom should look like this : [3, a, 6, e, 9, i, o, u, b] //top to bottom.
Here's my code. My approach is to loop over the two Deques and get the tail with the pollLast(); method and push it to an empty Deque - mergedStack. However, my output is close but not quite there : [o, 9, u, 6, b, 3]. I assuming I have a problem with the while loop, can anyone assist ?
package QueueInterfaceExercise1;
import java.util.ArrayDeque;
import java.util.Deque;
public class Tester {
public static Deque<Object> mergeQueue(Deque<Integer> intQueue, Deque<Character> charQueue) {
//Implement your logic here and change the return statement accordingly
// System.out.println(intQueue);
System.out.println(charQueue);
// [3, 6, 9]
// [a, e, i, o, u, b]
Deque<Object> mergedStack = new ArrayDeque<Object>();
// Object number = intQueue.getLast();
// System.out.println(number);
// mergedStack.addLast(number);
while( !intQueue.isEmpty() && !charQueue.isEmpty() ) {
int number = intQueue.pollLast();
char letter = charQueue.pollLast();
mergedStack.push(number);
mergedStack.push(letter);
}
return mergedStack;
}
public static void main(String[] args) {
Deque<Integer> integerQueue = new ArrayDeque<Integer>();
integerQueue.add(3);
integerQueue.add(6);
integerQueue.add(9);
Deque<Character> characterQueue = new ArrayDeque<Character>();
characterQueue.add('a');
characterQueue.add('e');
characterQueue.add('i');
characterQueue.add('o');
characterQueue.add('u');
characterQueue.add('b');
Deque<Object> mergedQueue = mergeQueue(integerQueue, characterQueue);
System.out.println("The elements in the merged queue are:");
for(Object element: mergedQueue)
System.out.println(element);
}
}
Your algorithm is close. Basically, you want to keep consuming elements from either deque while either deque has elements. So you want an
or
(not anand
). Something like,