ich hab hier eine Klasse Verwaltung. Diese soll Namen und die dazugehörigen Zimmernummern+Apparatnummern verwalten. Wir kennen bis jetzt Arraylist, also hab ich es auch damit versucht.
Nun soll es eine Methode geben, bei der man den Namen eingibt und die Apparatnummer herausbekommt. (bei mir heißt sie findeNummer() )
Ich bekomme nun in dieser Methode die Fehlermeldung "ClassCastException:null"
Vielleicht kann mir ja einer dabei helfen.
hier der Quellcode
Code:
import java.util.ArrayList;
/**
* Telefonbuch
*
* @Autor: Marco Dohnke
* @Version: 0.1
*/
public class Verwaltung
{
// instance variables - replace the example below with your own
private ArrayList namen;
private ArrayList zimmer;
private ArrayList nummern;
private int number;
private int zimmernummer;
/**
* Constructor for objects of class Verwaltung
*/
public Verwaltung()
{
namen = new ArrayList();
zimmer = new ArrayList();
nummern = new ArrayList();
}
/**
* Zugriffsmethoden
*/
public int anzahlNamen(){
return namen.size();
}
public void setDaten(String name,int z,int nr){
namen.add(name);
zimmer.add( new Integer(z) );
nummern.add( new Integer(nr) ) ;
}//ende setDaten
public int findeNummer(String name){
int index = 0;
while ( index < anzahlNamen() ){
if ( name.equals(namen.get(index)) ){String zimmernummer = (String) nummern.get(index);} else { zimmernummer = 0; }
index++;
}
return zimmernummer;
}//ende findeNummer
}
In Zeile 42 bekomme ich diese Meldung...
danke für die hilfe
Du solltest Dir deine Variablen nochmal angucken...
- int zimmernummer als Klassenvariable
- in findeNummer holst Du aus "zimmer" einen String raus, obwohl Du ein Integer reinsteckst
- Zimmernummer ist einmal ein String und einmal ein int in findeNummer
Indem du für diese Informationen eine eigene Klasse entwirfst und Objekt-Instanzen davon dann in der einen ArrayList speicherst.
Code:
public class PersonalInfo {
public PersonalInfo (String n, int znr, int anr) {
name = n;
zimmerNr = znr;
apparatNr = anr;
}
private String name;
private int zimmerNr;
private int apparatNr;
}
So wie du das hast gibt er mir folgenden Fehler:
"invalid method declaration; return type required"
Das heißt soviel dass er denkt es wäre ne Methode. Nun frag ich mich ob ich das an die falsche Stelle gesetzt hab oder ob da wirklich was fehlt. hier mein Gesamter Quelltext:
Code:
import java.util.ArrayList;
/**
* Telefonbuch
*
* @Autor: Marco Dohnke
* @Version: 0.1
*/
public class Verwaltung
{
// instance variables - replace the example below with your own
public Daten (String n, int znr, int anr) {
name = n;
zimmerNr = znr;
apparatNr = anr;
}
private String name;
private int zimmerNr;
private int apparatNr;
private ArrayList daten;
/**
* Constructor for objects of class Verwaltung
*/
public Verwaltung()
{
daten = new ArrayList();
}
/**
* Zugriffsmethoden
*/
public int anzahlNamen(){
return daten.size();
}
public void setDaten(String name,int z,int nr){
daten.add(new Daten(name,z,nr) );
}//ende setDaten
}
da das eine eigene Klasse ist, muß das auch in eine eigene Datei.
Verwaltung.java
Code:
public class Verwaltung {
public Verwaltung () {
daten = new ArrayList();
}
public int anzahlNamen () {
return daten.size();
}
public void addDaten (String name,int z,int nr) {
daten.add(new Datensatz(name,z,nr));
}//ende setDaten
}
Datensatz.java
Code:
public class Datensatz {
public Datensatz (String n, int znr, int anr) {
name = n;
zimmerNr = znr;
apparatNr = anr;
}
private String name;
private int zimmerNr;
private int apparatNr;
}
hmm, also das gehört zu den Grundlagen der OOP. Es geht darum, Objekte/Klassen mit ihren Eigenschaften zu identifizieren und zu implementieren. Durch Vererbung lassen sich Verallgemeinerungen abbilden. Durch Interfaces kann man bestimmte Verhaltensweisen anzeigen oder interne Angelegenheiten verbergen.
Wenn nun in deinem Programm Name, Zimmernummer und Apparatenummer als Einheit/Objekt angesehen werden kann, bildest du daraus ein Klasse. Was du damit später mal anstellst spielt erstmal keine Rolle. Ob die nun in einer ArrayList einem Vector oder gar einem Array ablegelegt werden ... völlig egal
Zum Klassendesign gehört auch die Definition der Schnittstelle. Welche Methoden stellst du zur Verfügung. Wie kann man auf die enthaltenen Daten zugreifen. In deinem Fall kommen z.B. ein paar get-Methoden in Frage, was dann auch dei Antwort auf deine zweite Frage ist.
jo der aufbau beim OOP war mir klar, danke trotzdem für die erklärung.
was ich bei 2. meinte ist, wie ich syntax-mäßig an den Inhalt von zum Beispiel dem ersten Namen komme.
ich hab schon bissl was probiert
daten.name.get(index) geht nicht, genauso wenig sämtliche ähnliche formen.
Ich würd nur gern wissen wie ich den index'ten Datensatz rausbekomme, danke
Nun habe ich in der Klasse Verwaltung eine Methode geschrieben, welche versucht den Namen anhand der zimmerNummer rauszubekommen.
Code:
public String findeName(int zNr){
int index = 0;
while ( index < anzahlNamen() ){
Datensatz d = (Datensatz) daten.get(index);
int zNr1 = d.getZimmerNr();
String n1 = d.getName();
if (zNr == zNr1) {n = n1;} else {n = new String("Kein Eintrag");}
}//ende while
return n;
}//ende findeName
Nur leider hängt sich mein System da nahezu auf.
ich arbeite mit BlueJ (darans solls nicht liegen, sondern eher am Code) und er arbeitet an der einen Methode schon 2 Minuten obwohl da nur ein Datensatz drin steht
achja:
Code:
public int anzahlNamen(){
return daten.size();
}
Hoffe jemand kann mir helfen
EDIT: Fehler gefunden: hab vergessen index hochzählen zu lassen...