ich hoffe, dass ihr mir helfen könnt, da ich mit dieser Aufgabe vom Sinn her überhaupt nichts anfangen kann. Ich bin Student und studiere Informatik. Dieses Semester beschäftigen wir uns ein wenig mit Java.
Uns wurde ein Algorithmus vorgestellt, der in einem gegebnen Array vin ganzen Zahlen das Minimum bestimmt. Nun sollen wir dieses Algorithmus derat modifizieren, dass das Minimum in einem String Array (String[]) und allgemeiner in einem Arrayvom Typ Comparable[] bestimmt wird.
Leider ist mir nicht klar, was genau das Minimum eines String-Arrays ist und somit, kann ich die Aufgabe auch nicht bearbeiten. Ich hoffe, dass ihr mir sagen könnt, was das besagte Minimum ist.
Danke schon mal.
Code:
class MinimumArrayInteger {
public static void main ( String[] args ) {
int[] array = new int[20];
array[0] = (int)(Math.random() * 1000);
array[1] = (int)(Math.random() * 1000);
array[2] = (int)(Math.random() * 1000);
array[3] = (int)(Math.random() * 1000);
array[4] = (int)(Math.random() * 1000);
array[5] = (int)(Math.random() * 1000);
array[6] = (int)(Math.random() * 1000);
array[7] = (int)(Math.random() * 1000);
array[8] = (int)(Math.random() * 1000);
array[9] = (int)(Math.random() * 1000);
array[10] = (int)(Math.random() * 1000);
array[11] = (int)(Math.random() * 1000);
array[12] = (int)(Math.random() * 1000);
array[13] = (int)(Math.random() * 1000);
array[14] = (int)(Math.random() * 1000);
array[15] = (int)(Math.random() * 1000);
array[16] = (int)(Math.random() * 1000);
array[17] = (int)(Math.random() * 1000);
array[18] = (int)(Math.random() * 1000);
array[19] = (int)(Math.random() * 1000);
int min;
min = array[ 0 ];
for ( int index = 0; index < array.length; index++ ) {
if ( array[ index ] < min )
min = array[ index ] ;
}
System.out.println("Das Minimum dieses Arrays ist: " + min );
}
}
die Klassen die dieses Interface implementieren haben eine Methode compareTo(Object obj) welche -1 zurückliefert wenn das Object kleiner als das übergebene ist,0 wenn beide gleich sind und 1 wenn das übergebene größer ist ...
Wie das diese Funnktion realisiert, kann dir egal sein ... du rufst nur auf die Objekte von Typ Compareable diese Funktion auf.
also zum Beispiel ((Compareable) array[1]).compareTo(array[2]);
den Rest solltest du jetzt allein hinbekommen sonst ist Informatik wohl nicht dein Fach *ggg*
Okay. Jetzt gibt er auch "BAUM" zurück. Wunderbar. Ihr habt mir sehr geholfen. Aber nun habe ich noch ein kleines Problem. Ich habe ja nun schon mit Comparable[] gearbeitet. Jetzt ist nur die Frage kann ich das ganze auch nurmit String ohne Comparable mache oder ist dies nicht möglich?
Sicher, denn die Methode compareTo ist ja schließlich bereits in der Klasse String
und der Compiler weiß das auch.
Du kannst also einfach schreiben:
Code:
if (array[i].compareTo(min) < 0)
dbac hat nur deshalb den cast eingebaut, um dir den Allgemeinfall zu verdeutlichen,
wenn dein Array ein Object[] wäre. Dann weiß der Compiler ja nicht, daß die Instanzen
vom Typ einer Klasse sind, die tatsächlich auch Comparable implementiert
(die Methode compareTo) besitzen
Ich muss euch doch noch einmal kurz belästige. Sorry!
Code:
package edu.cau.informatikII.serie01;
class MinimumArrayComparable {
@SuppressWarnings("unchecked")
public static void getminimum(Comparable[] array) {
Comparable min;
min = array[0];
for ( int index = 0; index < array.length; index++ ) {
int compareTo = ((Comparable)array[index]).compareTo(min);
if (compareTo < 0) {
min = array[index];
}
}
System.out.println("Das Minimum dieses Arrays ist: " + min );
}
}
Das Programm wird nun aber nicht mehr ausgeführt, die Frage ist. Was habe ich dann von Comparable. Wenn ich nicht verschiedene Typen in mein Array einbinden kann?
Danke schon mal!
kann nicht funktionieren, da man Interfaces nicht instanziieren kann, welcher Typ soll das auch sein?
Ein Interface ist nichts weiter als ein Versprechen, daß Instanzen von Klassen, die dieses
Interface implementieren, die im Interface deklarierten Methoden verstehen
von Interfaces kannst du keine Instancen (also Objecte) erzeugen ... new Comparable[10] geht also nicht .. dort schreibst du dann new String[10] hin. String implementiert Compareable und ist somit vom Typ Comparable...
Äh? Sehrwohl kann man "new Comparable[10]" aufrufen, das generiert einen Comparable-Array der Länge 10. Falsch wäre aber "new Comparable()"...
Nicht alles lässt sich mit allem Vergleichen, in so einem Comparable-Array sollte man nur ein Typ reinschreiben - entweder nur ints, oder nur Strings, ...
von Interfaces kannst du keine Instancen (also Objecte) erzeugen ... new Comparable[10] geht also nicht .. dort schreibst du dann new String[10] hin. String implementiert Compareable und ist somit vom Typ Comparable...
das ist aber falsch... natürlich kann man keine Instanz eines Interfaces anlegen, aber eine Arraydefinition geht natürlich - d.h. Comparable[] array = new Comparable[10]; ist korrekt und geht auch.
ansonsten - wegen den versch. Typen: wie schon gesagt - überleg dir was es bringt ints und Strings zu sortieren... wie soll das gehen ?!
Der nutzen, dass die methode comparable[] definiert ist einfach, dass du ohne probleme String[] oder Integer[] oder Double[] oder was auch immer testen lassen kannst (solange die Klasse Comparable implementiert). D.h. du hast für zig versch. aufrufe nur eine Methode. Aber im array versch. Klassen zuzulassen ist unsinn