J'espère que quelqu'un pourra m'aider avec mon petit problème. J'ai défini mon EmptyQueue et mon NotEmptyQueue de cette manière, en suivant ma file d'attente immutable de l'interface. Le principal problème c'est que la méthode enQueue, qui devrait ajouter un élément à myQueue ne fonctionne pas. Pls me aider:Ajout d'un élément à une file d'attente immutable Java
Interface:
public interface ImmutableQueue<E> extends Iterable<E> {
boolean isEmpty();
int size();
ImmutableQueue<E> enQueue(E e);
ImmutableQueue<E> deQueue();
E getTop();
}
EmptyQueue:
import java.util.Iterator;
import java.util.NoSuchElementException;
public class EmptyQueue<E> implements ImmutableQueue <E>, Iterable <E> {
@Override
public boolean isEmpty() {
return true;
}
@Override
public int size() {
return 0;
}
@Override
public ImmutableQueue<E> enQueue(E e) {
NotEmptyQueue<E> q= new NotEmptyQueue <>(e,this);
return q;
}
@Override
public ImmutableQueue<E> deQueue() {
throw new NoSuchElementException();
}
@Override
public E getTop() {
throw new NoSuchElementException();
}
@Override
public Iterator<E> iterator() {
return new Iterator<E>(){
@Override
public boolean hasNext() {
return false;
}
@Override
public E next() {
throw new NoSuchElementException();
}
};
}
}
NotEmptyQueue:
import java.util.Iterator;
public class NotEmptyQueue<E> implements ImmutableQueue<E>, Iterable <E>{
public E e;
public ImmutableQueue<E> tail;
public NotEmptyQueue(E e, ImmutableQueue<E> tail){
this.e = e;
this.tail = tail;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public int size() {
return tail.size() + 1;
}
@Override
public ImmutableQueue<E> enQueue(E e) {
return new NotEmptyQueue<>(e,this);
}
@Override
public ImmutableQueue<E> deQueue() {
return tail;
}
@Override
public E getTop(){
return e;
}
public static void main (String [] args){
NotEmptyQueue<Integer> myQueue= new NotEmptyQueue<>(new Integer(1),null);
myQueue.enQueue(9);
myQueue.enQueue(7);
System.out.println(myQueue.size());
System.out.println(myQueue.getTop());
for(Integer i : myQueue){
System.out.println(i);
}
}
@Override
public Iterator<E> iterator() {
return new Iterator<E>(){
ImmutableQueue<E> queue;
@Override
public boolean hasNext() {
return (!tail.isEmpty());
}
@Override
public E next() {
E res = queue.getTop();
queue = queue.deQueue();
return res;
}
Iterator<E> setQueue(ImmutableQueue<E> queue){
this.queue = queue;
return this;
}
}.setQueue(this);
}
}
Comment est-ce immuable si vous pouvez y ajouter des éléments? – Kayaman
Vous ne pouvez pas ajouter à une file d'attente immutable, par définition. Une file d'attente immuable semble plutôt inutile, puisque vous ne pouvez pas non plus la consommer. – chrylis
@Kayaman Crée un nouvel objet avec l'élément ajouté. – Bubletan