Problem mit Generics und Comparable

emre.hasan

Mitglied
Hallo Leute,

Ich muss was für die Uni proggen, ne Hausaufgabenhilfe will ich nicht, aber ich habe ein Fehler
mit meinem Comparable. Ich sitze mehr als 2 Tage dran und hab schon Brute-Force mäßig alles ausprobiert. Es will nicht. In den Tutorials von Oracle finde ich auch nichts passendes dazu. Hier mal mein Code von allen Klassen die verwendet werden.

Das Interface darf ich nicht ändern!
Java:
public interface PriorityQueue<E extends Comparable<E>> {
	E findMin() throws PREmptyException;
	E deleteMin() throws PREmptyException;
	void insert(E element) throws PQFullException;
	boolean isEmpty();
	int size();
}

Java:
public class PQNode<E extends Comparable<E>> implements Comparable<E> {
	private E value;
	PQNode<E> prev,next;
	
	public PQNode(E value, PQNode<E> prev, PQNode<E> next){
		this.value = value;
		this.prev = prev;
		this.next = next;
	}
	
	public E getValue(){
		return value;
	}

//	public int compareTo(PQNode<E> o) {
//		return getValue().compareTo(o.getValue());
//	}
	
	public PQNode<E> getPrev(){
		return prev;
	}
	
	public PQNode<E> getNext(){
		return next;
	}
	
	public void setNext(PQNode<E> next){
		this.next = next;
	}
	
	public void setPrev(PQNode<E> prev){
		this.prev = prev;
	}

	@Override
	public int compareTo(E o) {
		return getValue().compareTo(o);
	}
}
Java:
public class unsorted_linkedlist<E extends Comparable<E>> implements PriorityQueue<E> {

	PQNode<E> tail,head,current;
	static int counter = 0;
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public unsorted_linkedlist(){
		head = new PQNode(null,null,tail);
		tail = new PQNode(null,head,null);
		current = head;
	}
	public E findMin() throws PREmptyException {
		PQNode<E> temp = null;
		if(head.getNext() != null){ current = head.getNext(); temp = head.getNext(); }
		while(temp.getNext() != null)
		{
			temp = temp.getNext();
			if(current.compareTo(temp.getValue()) < 0)
				current = temp;
		}
		return current.getValue();
	}

	public E deleteMin() throws PREmptyException {
		E returnTemp = findMin();
		PQNode<E> temp = current;
		current.getPrev().setNext(current.getNext());
		current.getNext().setPrev(temp.getPrev());
		return returnTemp;
	}

	public void insert(E element) throws PQFullException {
		PQNode<E> temp = new PQNode<E>(element,tail.getPrev(),tail);
		tail.getPrev().setNext(temp);
		tail.setPrev(temp);
		counter++;
	}

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

	public int size() {
		return counter;
	}

Hier entsteht eigentlich auch der Fehler, den gebe ich nachdem Code
explizit nochmal an:

Java:
public class test {
	public static void main(String[] args) {
		unsorted_linkedlist<String> test = new unsorted_linkedlist<String>(); 
		test.insert("Hallo");
		test.insert("Element");
		System.out.println(test.deleteMin());
	}
}

Hier der Fehler:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Bound mismatch: The type String is not a valid substitute for the bounded parameter <E extends Comparable<E>> of the type PQNode<E>
Bound mismatch: The type String is not a valid substitute for the bounded parameter <E extends Comparable<E>> of the type PQNode<E>
The method insert(PQNode<String>) in the type unsorted_linkedlist<PQNode<String>> is not applicable for the arguments (String)
The method insert(PQNode<String>) in the type unsorted_linkedlist<PQNode<String>> is not applicable for the arguments (String)

at Aufgabe_3.test.main(test.java:5)

Ich hoffe jemand kann mir da behilflich sein
 
B

bygones

Gast
wuerd ich gern... aber der code kompiliert bei mir in eclipse mit java 1.6.0

gibts zwar dann nen NPE beim compareTo weil head/tail elemente mit null sind... aber kompiliert
 

emre.hasan

Mitglied
Hää?

Ich hab grad nachgeschaut, mein Eclipse unter Mac benutzt auch 1.6 beim kompilieren.
-.- . Sowas macht einen fertig ...

gibt er bei Syso() was aus?
 

Der Müde Joe

Top Contributor
>gibt er bei Syso() was aus?

Es wird beim insert eine NPE fliegen.
PQNode<E> temp = new PQNode<E>(element, tail.getPrev(), tail);

tail ist null....

EDIT:
ne sorry..hätte alle kopieren sollen....beim compareTo fliegt sie... (wie bygones schon erwähnt hat)

EDIT2:
Was soll übrigens der static counter? Zählen wieviele Elemente in allen je erstellten Listen sind.
 
Zuletzt bearbeitet:

emre.hasan

Mitglied
Bin mir eigentlich sicher das das klappt, da tail als Value = null ist, aber an sich ist tail ja ein Objekt von PQNode, dass im Konstruktor von unsorted_list schon gesetzt wird.

Damit dürfte das Element nicht auf ein Leeres zeigen, sondern eines mit fester Adresse, aber 'leerem Inhalt'.

In einem anderen Projekt hatte das nämlich genauso geklappt nur das <E extends Comparable<E>> macht mir Kopfschmerzen. Warum ist es nicht erlaubt ein String in der Testklasse explizit anzugeben???
 

Der Müde Joe

Top Contributor
>Bin mir eigentlich sicher das das klappt,

Ja. war mein Fehler, hab nur die "wichtigen" Code-Stellen kopiert...eben sie fliegt erst beim compareTo

>ein String in der Testklasse explizit anzugeben???

Klappt wunderbar:
Java:
public interface PriorityQueue<E extends Comparable<? super E>> {}

class unsorted_linkedlist<E extends Comparable<? super E>> implements PriorityQueue<E> {
	void foo(E e) {
		System.out.print(e);
		System.out.println("I am a " + e.getClass());
	}
}

class XXX {
	public static void main(String... _) {
		unsorted_linkedlist<String> s = new unsorted_linkedlist<String>();
		s.foo("foobar");
		s.foo("blub");
		unsorted_linkedlist<Integer> si = new unsorted_linkedlist<Integer>();
		si.foo(Integer.valueOf(0));
		si.foo(Integer.valueOf(2));
	}
}
 

emre.hasan

Mitglied
Ja wollte mir das Leben etwas einfacher machen, anstatt durch die ganze Liste durchzurasseln und alles von head bis tail durchzuzählen. Aber mach ich noch...
Sollte ja sein

int tempCounter = 0;
if(!isEmpty()){
PQNode temp = head;
while(temp.getNext() != tail){
temp = temp.getNext();
counter++
}
}

return tempCounter. Dann wäre es auch nciht static sondern würde sich nur auf die aktuelle Liste beziehen. Wäre schon schlauer ich weiß ^^
 

emre.hasan

Mitglied
was ist der unterschied zwischen <E extends Comparable<E>> und <E extends Comparable<? super E>>?

I.wie kam der gleiche Fehler ... -.-, auch obwohl ich alles du <E ... ? super E> ersetzt hatte.
In den Klassen selber kein Problem, in der main substitution ist nicht möglich....

Sollt ich vllt mal an ein anderen PC ran? Aber das dürfte doch nicht sein oder?

EDIT: Ich muss das mal jetzt austesten, ich geh mal zum Fachbereich und lad meine Daten mal hoch und kompiliere... und schreibe dann hier rein, ob es dann doch an meinem Mac-Java liegt...
 
Zuletzt bearbeitet:
B

bygones

Gast
nein dürfte nicht... und ich habe in meinem code auch kein [c]<E extends Comparable<? super E>>[/c] - das ? super heißt "nicht nur E sondern auch eine Oberklasse von E"
 

Der Müde Joe

Top Contributor
>und ich habe in meinem code auch kein

War ich..macht der Gewohnheit....

>Sollt ich vllt mal an ein anderen PC ran? Aber das dürfte doch nicht sein oder?

Erst mal Rahmenbedigungen testen.
OS / compiler / IDE

EDIT:
Habs mal mit dem Sun 1.6 von der Shell probiert und klappt. (eclipse hat da teils andere vorstellungen ;-)
 
Zuletzt bearbeitet:

Landei

Top Contributor
Ich bin etwas verwirrt vom Original-Code:

Java:
public class PQNode<E extends Comparable<E>> implements Comparable<E> {...
Damit sagst du, ein PQNode soll mit einem E verglichen werden können. Wäre es nicht sinnvoller, wenn die PQNodes untereinander vergleichbar wären? Also:
Java:
public class PQNode<E extends Comparable<E>> implements Comparable<PQNode<E>> {...
 

emre.hasan

Mitglied
Ja so seh ich das auch. Das war auch so, bis ich halt verzweifelt war und über Brute-Force alle möglichen <Inhalte> durch alles mögliche ersetzt habe um i.wann ein positives ergebnis zu bekommen.

Ne aber an sich war das so. das sieht man auch im original code, und zwar dort wo das eine compareTo(){
} auskommentiert ist...

Ich habs jetzt am Linux PC mit nem ganz normalen Java-Compiler gemacht.... Der Fehler will nicht weg


hasan@guangzhou:~/Desktop$ javac *.java
test.java:5: type parameter java.lang.String is not within its bound
unsorted_linkedlist<String> test = new unsorted_linkedlist<String>();
^
test.java:5: type parameter java.lang.String is not within its bound
unsorted_linkedlist<String> test = new unsorted_linkedlist<String>();
^
2 errors


Sollte ich vielleicht nochmal den ganzen Code hier hochladen?

Danke erstmal an alle, die soviel Geduld mit mir und meinem Problem haben.
 
G

Gast2

Gast
Ich habs jetzt am Linux PC mit nem ganz normalen Java-Compiler gemacht.... Der Fehler will nicht weg


hasan@guangzhou:~/Desktop$ javac *.java
test.java:5: type parameter java.lang.String is not within its bound
unsorted_linkedlist<String> test = new unsorted_linkedlist<String>();
^
test.java:5: type parameter java.lang.String is not within its bound
unsorted_linkedlist<String> test = new unsorted_linkedlist<String>();
^
2 errors

Ein String ist ja auch keine PQNode? Poste mal allen Code
 

emre.hasan

Mitglied
Ok hier

Java:
public class test {
	public static void main(String[] args) {
		unsorted_linkedlist<String> test = new unsorted_linkedlist<String>(); 
		test.insert("Hallo");
		test.insert("Element");
		System.out.println(test.deleteMin());
	}
}

Einzelne Dateien, aber zusammengefasst hier
Java:
public class PREmptyException extends Exception {
	public PREmptyException(){
		super("PRQueue ist leer");
	}
}

public class PQFullException extends Exception {
	public PQFullException(){
		super("PRQueue ist voll!");
	}
}

public interface Comparable<E> {
		public int compareTo(E o);
}

Java:
public interface PriorityQueue<E extends Comparable<E>> {
	E findMin() throws PREmptyException;
	E deleteMin() throws PREmptyException;
	void insert(E element) throws PQFullException;
	boolean isEmpty();
	int size();
}

Java:
public class unsorted_linkedlist<E extends Comparable<E>> implements PriorityQueue<E> {

	PQNode<E> tail,head,current;
	static int counter = 0;
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public unsorted_linkedlist(){
		head = new PQNode(null,null,tail);
		tail = new PQNode(null,head,null);
		current = head;
	}
	public E findMin() throws PREmptyException {
		PQNode<E> temp = null;
		if(isEmpty())
			throw new PREmptyException();
		if(head.getNext() != null){ current = head.getNext(); temp = head.getNext(); }
		while(temp.getNext() != null)
		{
			temp = temp.getNext();
			if(current.compareTo(temp) < 0)
				current = temp;
		}
		return current.getValue();
	}

	public E deleteMin() throws PREmptyException {
		if(!isEmpty()){
			E returnTemp = findMin();
			PQNode<E> temp = current;
			current.getPrev().setNext(current.getNext());
			current.getNext().setPrev(temp.getPrev());
			return returnTemp;
		}
		else
			throw new PREmptyException();
	}

	public void insert(E element) throws PQFullException {
		PQNode<E> temp = new PQNode<E>(element,tail.getPrev(),tail);
		tail.getPrev().setNext(temp);
		tail.setPrev(temp);
	}

	public boolean isEmpty() {
		return (head.getNext() == tail) ? true : false;
	}

	public int size(){
		int tempCounter = 0;
		if(!isEmpty()){
			PQNode temp = head;
			while(temp.getNext() != tail){
				temp = temp.getNext();
				tempCounter++;
			}
		}
		return tempCounter;
	}

	
}

Java:
public class PQNode<E extends Comparable<E>> implements Comparable<PQNode<E>> { //PQNODE rausl�schen??
	private E value;
	PQNode<E> prev,next;
	
	public PQNode(E value, PQNode<E> prev, PQNode<E> next){
		this.value = value;
		this.prev = prev;
		this.next = next;
	}
	
	public E getValue(){
		return value;
	}

	public int compareTo(PQNode<E> o) {
		return getValue().compareTo(o.getValue());
	}
	
	public PQNode<E> getPrev(){
		return prev;
	}
	
	public PQNode<E> getNext(){
		return next;
	}
	
	public void setNext(PQNode<E> next){
		this.next = next;
	}
	
	public void setPrev(PQNode<E> prev){
		this.prev = prev;
	}

//	@Override
//	public int compareTo(E o) {
//		return getValue().compareTo(o);
//	}
}
 
S

SlaterB

Gast
fange bitte parallel in einem anderen Projekt komplett von vorne an, beginne mit

Java:
public class Test
{
    public static void main(String[] args)
    {
        UnsortedLinkedlist<String> test = new UnsortedLinkedlist<String>();
        System.out.println("Ende");
    }
}


class UnsortedLinkedlist<T>
{
}
(auch gleich mal richtige Klassennamen..)
funktioniert das?
jetzt nach und nach Teile des Originalcodes ergänzen/ kopieren, den generischen Parameter komplizierter machen,
die Node-Klasse dazu usw., zur Sicherheit nirgendwo E verwenden, sondern einen der anderen Buchstabeben..

wenn es irgendwann nicht mehr geht dann auch einen Schritt zurücknehmen und testen ob es dann wieder geht,

bei deinen Fehlermeldungen habe ich irgendwie das Gefühl, dass sie sich auf andere Klassen beziehen.., besonders ganz am Anfang
> The method insert(PQNode<String>) in the type unsorted_linkedlist<PQNode<String>> is not applicable for the arguments (String)
 

emre.hasan

Mitglied
Ich habs versucht. Schritt für Schritt einzeln abzutippen. Klassennamen alles groß etc...

Mein PQNode<E> muss doch generisch sein, damit ich Inhalte vom Typ E reinspeichern kann.
Dann hab ich doch auch bei PQNode<E> Comparable implementiert das es auch mit sich identischen Objekten vergleichbar ist.

Dann habe ich mein Unsorted_LinkedList<E extends Comparable<E>> das ja auch generisch sein muss, weil ich vom Typ E dann noch PQNodes mit dem gleichen Typen erstelle, und desweitern müssten die auch comparable sein, weil ich das interface PriorityQueue<E> implementiere. Das klappt doch alles super schön.

Ich hab es jetzt auf drei PC's mit java 1.6.0 getestet. Der will nirgends und immer der gleiche Fehler bei der Test-Klasse...

Ich bedanke mich bei allen für die Hilfsversuche. Ich denke mal das Thema ist abgeschlossen, weil der Fehler bei meinen verwendeten PC's/Eclipse-Versionen oder ähnlichem liegt anscheinend.

Schönen Abend noch
 

emre.hasan

Mitglied
So Problem gelost für die die es interessiert.
Ich hatte meine eigenes Compare Interface und dann gab es namenskollisionen mit dem originalen also einfach mein Interface Loeschen oder nicht hinzufügen und dann lauft das ganze Erst einmal
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Collector Generics Problem (incl. Stream & Lambda) Allgemeine Java-Themen 4
N Problem mit Generics und Interface Allgemeine Java-Themen 4
M Problem mit Generics Allgemeine Java-Themen 10
H Problem mit Java Generics Allgemeine Java-Themen 6
P Generics Problem Allgemeine Java-Themen 10
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
S Generics-Problem Allgemeine Java-Themen 3
R Problem mit Generics Allgemeine Java-Themen 2
H Generics Problem Allgemeine Java-Themen 3
M Problem mit Generics Allgemeine Java-Themen 3
S Problem mit generics -> ClassCastException und ka wieso Allgemeine Java-Themen 20
R Problem mit Generics Allgemeine Java-Themen 8
M Problem mit Generics und clone() Allgemeine Java-Themen 2
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19

Ähnliche Java Themen

Neue Themen


Oben