Super Klasse

archer1000

Mitglied
Hallo Leute, wieder muss ich euch um etwas Hilfe bei meiner Aufgabe bitten.
Ich habe folgenden Aufgabe vorgegeben:

Aufgabe 5 (10 Punkte)

Die Datenstruktur Stack speichert Elemente nach dem LIFO (Last In First Out). Dies beudeutete, dass ein neues Element oben auf den Speicher abgelegt wird und auch nur auf das oberste Element zugegriffen werden kann. Folgende Methoden müssen zur Verfügung stehen:

push() Ein neues Element wird abgespeichert.
pop() Das oberste Element wird züruckgegeben und von Stack entfernt
get() Das oberste Element wird ausgelesen
isEmpty() Ist der Stack leer?

a) (3 Punte) Schreiben Sie eine Exceptionklasse StackException, die als Nachricht „Fehler in Methode: X“ züruckgibt, wobei X Methodenname ist.
b) (6 Punkte) Schreiben Sie einen generischen Stack, der für alle Typen offen ist und die angegebenen Mehtode implementiert. An den geeigneten Stellen soll die Exception aus a) geworfen werden.
c) (1 Punkte) Wäre folgendes erlaubt? Begründung!
Stack<? Super Integer> = new Stack <Number>()


Ich habe Teil b) soweit ich kann implementiert ohne den Teil mit Exception. a und c verstehe ich überhaupt nicht. Könnte bitte jemand diese Teile etwas näher Dummysicher erläutern? Das wär sehr nett. Danke.
Was ist bei a gemeint, was man da überhaupt machen und was ist der Sinn?
Was bedeutet diese Code Zeile?

Java:
import java.util.ArrayList;




public class Stack<T> {
		
		
			int counter = 0;
			private T Object;
	        ArrayList<T> memory = new ArrayList<T>();
	        
	        public String push(T obj) { // Speichert ein neues Objekt
	        	if (isFull()==false){
	                memory.add(obj);
	                counter++;
	                return("Der Element wurde addiert");
	                	                
	        	}
	        	else 
	        		return("Der Speicher ist voll");
	        	
	        }
	        public String getMemory(){
	        	if(empty()){
	        		return "Inhalt des Speichers ist leer.";
	        	}
	        	else {
	        	String n = "Inhalt der Speicher ist: "; 
	        	for (int i = counter -1; i >= 0; i--){
	        		System.out.println();
	        		//Ich will hier Zeilenumbruch einbauen, geht es mit leichteren Methode?
	        		n = n + memory.get(i) + ", ";
	        	}
	        	return n;
	        	}
	        }
	        public T top() { // Gibt das oberste Objekt wieder
	              
	            	  return memory.get(counter - 1);
	                              
	            	   
	        }
	       
	        
	        public boolean empty() { // Prüft, ob der Stapel leer ist
	                return counter == 0;
	        }
	        
	        
	        public String pop() { // Entfernt das oberste Objekt aus dem Stapel
	                
	        	if (empty()==true){
	                return "Kein Element kann gelöscht werden";	                	                
	        	}
	        	else {
	        		memory.remove(counter - 1);
            		counter--;
	        		return "Der Element wurde gelöscht";
	        	}
	        	
	                	
	                
	        }
	        boolean isFull(){
	        	if (counter >= 10){
	                return true;
	                
	        	}
	        	else 
	        		return false;
	        }
       
	}
 
Du sollst dir eine eigene Exception schreiben:

Java:
public class StackException extends RuntimeException { // bzw. extends Exception wenns ne checked Exception sein soll
  [...]
}

Diese Exception kannst du dann an geeigneter Stelle werfen, bspw. wenn jemand ein Element aus dem Stack nehmen will obwohl gar kein Element drin ist.

Zu b)
Du hast viel mehr Methoden implementiert als gefordert, es reicht wenn du diese 4 Methoden nach außen hin publizierst die oben angegeben sind. Außerdem solltest du mal nach den Rückgabewerten schauen:
- String push(T obj), warum soll hier ein String zurückgegeben werden? Das macht keinen Sinn. Geeignet wäre hier void.
- String pop(), warum hier ein String? Geeignet wäre hier doch eher T, also
Code:
T pop()
 
Du sollst dir eine eigene Exception schreiben:

Java:
public class StackException extends RuntimeException { // bzw. extends Exception wenns ne checked Exception sein soll
  [...]}
[/code]

Was soll in meinem Fall anstatt [...] stehen?
Etwa
Java:
System.out.println("""Fehler in Methode: X);
wenn nicht wie ist es?



Zu b)
Du hast viel mehr Methoden implementiert als gefordert, es reicht wenn du diese 4 Methoden nach außen hin publizierst die oben angegeben sind. Außerdem solltest du mal nach den Rückgabewerten schauen:
- String push(T obj), warum soll hier ein String zurückgegeben werden? Das macht keinen Sinn. Geeignet wäre hier void.
- String pop(), warum hier ein String? Geeignet wäre hier doch eher T, also
Code:
T pop()[/QUOTE]

Du Hast Recht, Die String Zürucklieferung wurde bei mir für GUI gedacht, dass auf Bildschirm entsprechende Texte auch erscheinen. Aber man kann es auch ohen Rückgabe natürlich machen. Persönlich denke ich auch, dass deine Vorschläge mehr Sinn machen. 

Was ist auch mit c)?

Danke vielmals.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben