daten ist ne ArrayList und soll sortiert werden, dazu wandel ich es in ein Array um, weils da ne sort-Funktion gibt. (oder gibts ne andere Möglichkeit die Arraylist zu sortieren?)
also mein code bis jetzt:
Code:
public String findeErsten() {
String[] d = new String[100];
daten.toArray(d);
Arrays.sort(d);
return d[0];
}// ende findeErsten
Ich wäre echt dankbar für helfende Leute...
Fehlermeldung:
beim compilieren keine, erst wenn ich auf die methode zugreife sagt er ArrayStoreException: null (in java.lang.System)
Geht aber nur, wenn die Objekte in der ArrayList die compareTo()-Methode überschreiben.
Die String-Objekte und die Wrapperklassen der primitiven Datentypen machen das von Hause aus.
Die ArrayStoreException weist darauf hin, dass versucht wurde ein Objekt im Array zu speichern, der nicht dem Typ des Arrays entspricht. In deinem Fall eben null.
Geht aber nur, wenn die Objekte in der ArrayList die compareTo()-Methode überschreiben.
Die String-Objekte und die Wrapperklassen der primitiven Datentypen machen das von Hause aus.
Die ArrayStoreException weist darauf hin, dass versucht wurde ein Objekt im Array zu speichern, der nicht dem Typ des Arrays entspricht. In deinem Fall eben null.
das hab ich auch grad rausgefunden gehabt, danke trotzdem
nun der nächste Fehler..
meine arraylist verwaltet eine klasse "Vornamen", da bekomm ich nun den nächsten Fehler...
ich geb ma ganzen Quellcode.
Klasse Verwaltung:
Code:
import java.util.*;
/**
* Write a description of class Verwaltung here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Verwaltung
{
// instance variables - replace the example below with your own
private ArrayList daten;
private String vorname;
private String[] d;
/**
* Constructor for objects of class Verwaltung
*/
public Verwaltung() {
daten = new ArrayList();
vorname = "";
}
/**
* ....Methoden....
*/
public int anzahlNamen(){
return daten.size();
}
public void setVorname(String vorname){
daten.add(new Vornamen(vorname));
}
public String findeErsten() {
String erster;
Collections.sort(daten);
erster = (String)daten.get(0);
return erster;
}// ende findeErsten
}
Klasse Vornamen:
Code:
/**
* Write a description of class Vornamen here.
*
* @author (your name)
* @version (a version number or a date)
*/
public class Vornamen
{
// instance variables - replace the example below with your own
private String vn;
/**
* Constructor for objects of class Vornamen
*/
public Vornamen(String vorname)
{
vn = vorname;
}
public String getVorname(){
return vn;
}
}
Fehler:
Code:
ClassCastException: Vornamen (in java.util.Arrays)
public String findeErsten() {
Collections.sort(daten);
Vorname vn = (Vorname)daten.get(0);
return vn.getVorname();
}// ende findeErsten
Da dein String in einer Klasse Vorname steckt und dein Vorname-Objekt in der ArrayList gespeichert ist, musst du zunächst das Vorname-Objekt aus der ArrayList holen und dessen Methode getVorname() aufrufen, um einen String zurückgeben zu können.
So, wie ich es geschrieben habe, sollte es funktionieren.
Dazu bitte nochmals kontrollieren und ggf. die komplette Fehlermeldung posten.
Das Sortieren wird aber nicht funktioinieren, weil deine Klasse Vorname die Methode compareTo() nicht überschreibt.
Deine Objekte, die du vergleichen möchtest, müssen, so fern sie keine Wrappertypen für primitive Datentypen sind, die compareTo()-Methode überschreiben.
Also implementierst du das Interface java.lang.Comparable
Code:
public class Vornamen implements Comparable {
...
public int compareTo(Object obj) {
//dein Code
return 0;
}
...
in die Klasse.
Dazu kannst du mit der Forumsuche mehrere Ergebnisse finden.
Zur Fehlermeldung: Ich benötige die komplette Meldung, so wie sie der Compiler ausgibt.
mal ganz doof gefraget ? warum eine eigene Klasse Vorname ???
was steht in dieser Klasse drinnnen ? Ein String der den Vornamen speichert... mhm dafür ne eigene Klasse ist überflüssig
Code:
public String findeErsten() {
String erster;
Collections.sort(daten);
erster = (String)daten.get(0);
return erster;
}// ende findeErsten
das kann ja gar net gehen - in daten sind objekte des Typs Vorname und du holst dir n String raus.
Nochmal allgemein:
Damit Objekte sortierbar sind, muss die entsprechende Klasse das Interface Comparable implementieren (bzw. beim sortieren muss ein Comparator mitgegeben werden), damit Java weiß wie es die Objekte sortieren muss.
Die Aufgabe lautet dass eine Sammlung von Objekten an Vornamen verwaltet werden sollen, man kann das ganze auch erweitern (nachname usw)
Wir haben "Objektsammlung" als ArrayList, die eine weitere Klasse verwaltet, kennengelernt. Daher verwende ich diese. Mir fehlt einfach eine andere Idee.
Sich kann man das bei nur einer Objekteigenschaft auch in ein Array schreiben, aber wie gesagt, es geht um Erweiterung.
Naja weiterhin ist es teil der Aufgabe den kleinsten (alphabetisch ersten) Namen zu finden. Daher meine Probleme...
Ich weiß leider nicht was das Interface Comparable macht und kann es daher auch nicht verwenden. Würdet ihr es mir bitte erklären? danke
ok - dann würd ich einfach mal deine Klasse "Vorname" in "Person" oder so umschreiben, die nur einen String momentan hält (der Vorname).
Das Interface Comparable zwingt dich die Methode compareTo(Object o) zu implementieren. Diese Methode sagt Java ob das übergebene Objekt kleiner, gleich oder größer ist als ein anderes.
in deinem Fall den "kleinsten" Namen finden, da wir nur den Vornamen haben kann nur er beachtet werden. Er ist ein String und diese Klasse hat dankenswerderweiße schon die compareTo Methode implementiert.
D.h. du musst sozusagen nur das Sortieren an den String weitergeben
Code:
public class Person implements Comparable {
// alles was die Klasse so braucht
public int compareTo(Object o) {
Person otherPerson = (Person)o;
return vorname.compareTo(otherPerson.getVorname());
}
}
hast du nun einen ArrayListe, die voll mit Objekten vom Typ Person ist kannst du per Collections.sort() die Liste sortieren und per get(0) dann das erste Element holen !