2013-10-09 2 views
0

Je continue de recevoir une erreur indiquant qu'il existe des types incompatibles. J'ai copié cela directement dans un livre parce que nous sommes censés apporter des modifications au code pour améliorer le jeu de la guerre. J'ai tous les autres cours complets et compilés mais celui-ci me donne des ajustements. Voici le code:Incompatible Types Erreur dans Java

public class ArrayStack<E> implements Stack<E> { 

private E[] data; 

private int size; 

public ArrayStack() { 
    data = (E[])(new Object[1]); 
    size = 0; 
} 

public boolean isEmpty() { 
    return size == 0; 
} 

public Object pop() { 
    if (isEmpty()) { 
     throw new EmptyStructureException(); 
    } 
    size--; 
    return data[size]; 
} 

public Object peek() { 
    if (isEmpty()) { 
     throw new EmptyStructureException(); 
    } 
    return data[size - 1]; 
} 

protected boolean isFull() { 
    return size == data.length; 
} 

public void push(Object target) { 
    if (isFull()) { 
     stretch(); 
    } 
    data[size] = target; 
    size++; 
} 

protected void stretch() { 
    E[] newData = (E[])(new Object[data.length * 2]); 
    for (int i = 0; i < data.length; i++) { 
     newData[i] = data[i]; 
    } 
    data = newData; 
} 
} 

L'erreur se produit dans la méthode push() aux données [Taille] = cible; ligne.

EDIT ::: Je reçois maintenant cette erreur. "type Stack ne prend pas de paramètres public class ArrayStack implémente Stack"

La classe de pile est la suivante.

public interface Stack<E> { 

public boolean isEmpty(); 

public E peek(); 

public E pop(); 

public void push(E target); 

} 
+1

S'il vous plaît montrer votre 'l'interface Stack' (je suppose que vous n'êtes pas en utilisant' java.util.Stack' classe intégrée). – rgettman

Répondre

1

changement Object-E comme type de paramètre de la méthode push().

public void push(E target) { 
    if (isFull()) { 
     stretch(); 
    } 
    data[size] = target; 
    size++; 
} 

De même, vous devez également modifier le type de retour de pop() et déclarer peek()-E.

public E pop() { 
    if (isEmpty()) { 
     throw new EmptyStructureException(); 
    } 
    size--; 
    return data[size]; 
} 

public E peek() { 
    if (isEmpty()) { 
     throw new EmptyStructureException(); 
    } 
    return data[size - 1]; 
} 

Maintenant votre classe est entièrement générique.

+0

Je reçois maintenant cette erreur. "type Stack ne prend pas de paramètres public class ArrayStack implémente Stack" – Alec

+1

@Alec: 'Stack ' n'est pas une interface dans le JDK, c'est une classe. Et dans votre code, vous "implémentez" à partir d'une classe, alors que vous pouvez simplement "étendre" les classes. – Jack

0

méthode push n'est pas générique comme le reste de la classe, changer pour:

public void push(E target) { 
    if (isFull()) { 
     stretch(); 
    } 
    data[size] = target; 
    size++; 
} 

Dans tous les cas, les navires JDK avec la classe ArrayDeque qui répondent à vos besoins sans être un code morceau o collé à partir un livre.

ArrayDeque<YourObj> stack = new ArrayDeque<YourObj>(); 
stack.push(new YourObj()); 
YourObj head = stack.peek(); 
head = stack.pop(); 
+0

Je reçois maintenant cette erreur. "type Stack ne prend pas de paramètres public class ArrayStack implémente Stack" – Alec