W
Wolfgke
Gast
Mein Problem ist folgendes (es handelt sich um eine Aufgabe für die Uni; ich habe sie mir nicht selber ausgedacht):
Gegeben ist folgendes Interfaces, welches ich auszugsweise (um den Arbeitsaufwand für euch, die ihr das doch freiwillig macht, zu senken) veröffentliche:
Sorter.java:
Außerdem noch das Interface SortAlgorithm, welches aufs wesentliche reduziert so aussieht:
Auf der Basis von Sorter habe ich eine Klasse ArraySorter implementiert:
Außerdem habe ich auf Basis von SortAlgorithm ein BubbleSort implementiert
Nun zu meinem Problem:
Ich habe ein kleines Testprogramm implementiert:
In ihm kommt es zu folgendem Output:
-1
Exception in thread "main" java.lang.ClassCastException
at java.lang.String.compareTo(String.java:777)
at tut_aufgabe05.ArraySorter.compareElements(ArraySorter.java:31)
at tut_aufgabe05.BubbleSort.run(BubbleSort.java:15)
at tut_aufgabe05.SortView.main(SortView.java:42)
Press any key to continue...
(Ausgabe des ungekürzten Programms)
Seltsamerweise funktioniert es mit einem String[]-Array korrekt. Noch seltsamer: in main() funktioniert der Vergleich korrekt (System.out.println(as.compareElements(1,2))
. Nur nicht im BubbleSort.
Mein Wunsch: könntet ihr das Programm so korrigieren, dass diese Exception, deren Ursache ich nicht kenne, nicht mehr auftritt? Ich weiß, dass es möglicherweise nervig ist, das Programm eines Fremden zu debuggen. Aber angesichts der Tatsache, dass ich fast eine ganze Stunde dasaß, um das Programm für das Forum auf das wesentliche zu reduzieren, bin ich der Meinung, dass das dennoch zumutbar ist.
Gegeben ist folgendes Interfaces, welches ich auszugsweise (um den Arbeitsaufwand für euch, die ihr das doch freiwillig macht, zu senken) veröffentliche:
Sorter.java:
Code:
package tut_aufgabe05;
public interface Sorter {
public int getLength();
/**
* Vergleicht 2 elemente
* @param a Element a
* @param b Element b
* @return a.compareTo(b)
* privater Hinweis: a.compareTo(b) bezieht sich auf Element a und Element b und nicht die int-Werte
*/
public int compareElements(int a, int b);
// Viele weitere Methoden kommen noch
[...]
}
Außerdem noch das Interface SortAlgorithm, welches aufs wesentliche reduziert so aussieht:
Code:
package tut_aufgabe05;
/**
* Interface für einen Sortieralgorithmus
*
*/
public interface SortAlgorithm {
/**
* Sortiert mithilfe von sorter das Feld über den implementierten Algorithmus
* @param sorter Der Sortierer
*/
public void run(Sorter sorter);
}
Auf der Basis von Sorter habe ich eine Klasse ArraySorter implementiert:
Code:
package tut_aufgabe05;
public class ArraySorter implements Sorter
{
Comparable[] elements;
Comparable[] elements_beginning;
ArraySorter(Comparable[] c)
{
elements=new Comparable[c.length];
elements_beginning=new Comparable[c.length]; // Diese Zeile ist unwichtig für das Problem
for (int i=0; i<c.length; i++)
{
elements[i]=c[i];
elements_beginning[i]=c[i];
}
}
public int getLength()
{
return elements.length;
}
public int compareElements(int a, int b)
{
return elements[a].compareTo(elements[b]);
}
// selbstverständlich kommt auch hier noch eine Menge anderes Zeug
}
Außerdem habe ich auf Basis von SortAlgorithm ein BubbleSort implementiert
Code:
package tut_aufgabe05;
public class BubbleSort implements SortAlgorithm
{
public void run(Sorter sorter)
{
for (int i=0; i<sorter.getLength(); i++)
for (int j=0; j<i; j++)
{
if (sorter.compareElements(j,i)>0)
{
sorter.xchange(i,j);
}
}
}
}
Nun zu meinem Problem:
Ich habe ein kleines Testprogramm implementiert:
Code:
package tut_aufgabe05;
public class SortView
{
public static void main(String[] args)
{
// I have simply used some random numbers
Integer[] array2sort=
{
new Integer(609),
new Integer(10),
new Integer(232),
new Integer(353),
new Integer(132),
new Integer(44),
new Integer(16),
new Integer(390),
new Integer(988),
new Integer(726)
};
ArraySorter as=new ArraySorter(array2sort);
System.out.println(as.compareElements(1,2));
BubbleSort bs=new BubbleSort();
bs.run(as);
}
}
In ihm kommt es zu folgendem Output:
-1
Exception in thread "main" java.lang.ClassCastException
at java.lang.String.compareTo(String.java:777)
at tut_aufgabe05.ArraySorter.compareElements(ArraySorter.java:31)
at tut_aufgabe05.BubbleSort.run(BubbleSort.java:15)
at tut_aufgabe05.SortView.main(SortView.java:42)
Press any key to continue...
(Ausgabe des ungekürzten Programms)
Seltsamerweise funktioniert es mit einem String[]-Array korrekt. Noch seltsamer: in main() funktioniert der Vergleich korrekt (System.out.println(as.compareElements(1,2))
Mein Wunsch: könntet ihr das Programm so korrigieren, dass diese Exception, deren Ursache ich nicht kenne, nicht mehr auftritt? Ich weiß, dass es möglicherweise nervig ist, das Programm eines Fremden zu debuggen. Aber angesichts der Tatsache, dass ich fast eine ganze Stunde dasaß, um das Programm für das Forum auf das wesentliche zu reduzieren, bin ich der Meinung, dass das dennoch zumutbar ist.