ich hab einige ziemlich simple Probleme, die mich jedoch ziemlich beschäftigen, vielleicht weil ich noch ziemlich "in C denke", womit ich nicht annähernd so viele Probleme hatte wie jetzt mit Java., vielleicht auch einfach weil ich Java noch nicht ganz verstanden habe, vielleicht aber auch weil ich einfach ein dummer Esel bin
Jedenfalls habe ich hier eine "Hashtable" Übung, bzw. ein Array und wir sollen Methoden schreiben, die Elemente einfügen, löschen, suchen.. und bei mir scheitert es schon beim einfügen. Zusätzlich sollen wir noch bei zB schon vorhandenen Elementen beim einfügen, RuntimeExceptions werfen. Irgendwie komme ich damit nicht so zurecht. Beispielsweise sieht mein Codestück fürs adden wie folgt aus:
Code:
public void add(Student s){
if (array[array.length]!=null){ // Wenn Array voll, Fehlermeldung
throw new RuntimeException(); // Noch keine Ahnung wie korrekter Code aussieht
}
int i = 0;
for (i=0; i<array.length; i++) {
if (array[i] == null) {
array=s;
break;
}
if (array==s){
throw new RuntimeException() //Noch keine Ahnung..
}
}
}
Wenn ich es richtig verstehe, muss ich für die RuntimeExceptions eine eigene Klasse definieren, sprich sowas wie "public class RuntimeExceptions extends..." und dort hat alles definieren. Aber wieso funktioniert das einfügen nicht? Ähnlich wie das einfügen habe ich auch die Methoden Löschen und Suchen geschrieben.. Was wäre bei diesem Code alles falsch? Würde mich sehr über Hilfe freuen..
Erstmal ohne s (nur RuntimeException), und dann umgekehrt:
public class MyNewException extends RuntimeException.
Du kannst allerdings auch eine neue Instanz von RuntimeException erzeugen und die mit einer aussagekraeftigen Message ausstatten.
array[array.length] wirft eine ArrayIndexOutOfBoundsException. Erlaubte Werte bein Zugriff auf Arrayelemente gehen von 0 bis length-1. Im Kopf der for-Schleife hast du es richtig gemacht.
public void add(Student s){
if (array[array.length]!=null){ // Wenn Array voll, Fehlermeldung
throw new RuntimeException(); // Noch keine Ahnung wie korrekter Code aussieht
}
int i = 0;
for (i=0; i<array.length; i++) {
if (array[i] == null) {
array=s;
break;
}
if (array==s){
throw new RuntimeException() //Noch keine Ahnung..
}
}
}
Ich glaube die Logik passt noch nicht. Man sieht zwar nicht wie bei dir
Code:
array
definiert ist aber vermutlich sowas wie
Code:
Student[] array = new Student[10];
Das ist dann ein Array das zehn Einträge vom Typ Student aufnehmen kann. Leere Stellen im Array sind "null".
Und solche leeren Stellen können überall im Array auftreten, nicht nur am Ende. Deshalb ist die erste Prüfung überflüssig. Du gehst beim Einfügen einfach das ganze Array durch. Wenn du eine "null"-Stelle findest fügst du den Eintrag dort ein und return'st. Wenn du ganz durch bist und hast keine "null"-Stelle gefunden wirfst du deine Exception hinter der Schleife.