ICh habe mich mal wieder an einer weiteren Ausnahme versucht, das funktioniert auch so weit ganz gut doch nun gibt mir meine Methode aus es würde eine return anweisung fehlen!?
Java:
// gibt das Dokument beim Index zurückpublicObjectgetElement(int index){try{if(index <0|| index >=getSize()){thrownewVarArrayIllegalIndexException("Fehler ungültiges Argument");}else{return elems[index];}}catch(VarArrayIllegalIndexException e){System.out.println(e.getMessage());}}
Du musst in jedme Falle ein Object zurückgeben. Was ist jetzt aber, wenn index z.B. kleiner 0 ist? dann wirfst du eine Exception, fängst sie aber direkt(komisch? )... dort gibst du dann allerdings nichts zurück ?!
Daher wird gemeckert !
Hm, ich glaube, das mit den Exceptions hast du noch nicht ganz richtig verstanden: Entweder eine Methode wirft in einer ganz bestimmten Situation eine ganz bestimmte Exception, oder sie fängt Ausnahmen, die durch aufgerufene Methoden etc. entstehen, ab. In deinem Fall fängst du jedoch eine Exception ab, die du sogar erst selbst erzeugt hast. Das ist widersinnig. Entferne das try-catch-Konstrukt (also entferne alle catch-Blöcke komplett und umklammere den eigentlichen Code nicht mehr mit try) und lass stattdessen die Methode die Exception werfen.
Wozu ist VarArrayIllegalIndexException überhaupt gut? Und was macht dieses getSize()? Ich denke, das ist alles komplett überflüssig und deine Methode bräuchte nicht länger zu sein als eine Zeile Code.
Also zum return erstmal wenn ich in dem Array n negativen index eingebe, kann doch garkein Objekt zurückgegeben werden...
getSize() gibt die Größe des Arrays zurück.
Ich soll da eine ungeprüfte Ausnahme implementieren. Der Aufruf der Methode findet dann ja direkt in der Mainmethode statt, macht es denn sinn die da zu fangen?
Ok wo fange ich das denn ansonsten? Wenn ich den rest weglasse bekomme ich ja den Fehler "Syntax error, insert "Finally" to complete BlockStatements"
Meine main methode dazu:
Java:
publicstaticvoidmain(String[] args){VarArray neuesarray =newVarArray(1);Dokument eins =newDokument("hallo","dok1", AUDIO,true);Dokument zwei =newDokument("nochmal","dok2", PDF,false);
neuesarray.addElement(eins);
neuesarray.addElement(zwei);System.out.println("Hier sollte jetzt eine 2 stehen: "+ neuesarray.getSize());
neuesarray.deleteElement(1);System.out.println("Dokument zwei geloescht, zeige Dokument eins an: ");System.out.println(neuesarray.getElement(0));VarArray arraytest =newVarArray(-3);
neuesarray.getElement(3);
neuesarray.getElement(2);
neuesarray.getElement(1);}}
Da VarArrayIllegalIndexException eine RuntimeException ist, musst du diese nicht fangen, kannst es aber wenn du willst. Wie? Ganz normal wie bei allen anderen Exceptions auch! (hier macht`s denk ich nicht viel Sinn und verfehlt denke ich auch die Aufgabenstellung (meine Meinung))
Du wirfst nur eine Exception, wenn du ein Problem nicht lokal lösen kannst, aber die Vermutung hast, eine höhere Ebene könnte etwas sinnvolles tun. Also kümmert sich der Aufrufer der Methode, oder der Aufrufer des Aufrufers der Methode, oder... darum. Wie bei der Bundeswehr: Melden macht frei!
Das ist nur zum Prüfen ob meine andere Exception funktioniert...
Ich versteh leider nich so ganz, was ich da jez genau ändern muss ???:L
Also die main methode unten soll jez
bei diesen beiden eingaben die Fehlermeldung "....ungültiges Argument" ausgeben, da neuesarray ja nur eine größe von 2 hat. Bei getElement(1); jedoch dürfte dann ja die Fehlermeldung nicht kommen...
publicObjectgetElement(int index){try{if(index <0|| index >=getSize()){thrownewVarArrayIllegalIndexException("Fehler ungültiges Argument");}else{return elems[index];}}}
Weil mir hier bei der 2t letzten Klammer die Fehlermeldung angezeigt wird "Syntax error, insert "Finally" to complete BlockStatements" aber finally ist doch optional oder nicht?
Oh man stimmt
Ich bin auch langsam echt durch den Wind...nach paar std Java...
Also das funktioniert und bricht dann komplett ab, was bei einer RuntimeException ja auch so sein soll oder?
Einziges wehwehchen jez ist das wenn ich neuesarray.getElement(1) inner main aufrufe dann passiert genau das gleiche dabei ist doch neuesarray 2 felder groß(0 und 1)
Edit: Ach schon gut ich bin inzwischen wohl sogar zu doof um meine eigenen Code zu lesen, inner main Methode wird ja ein Objekt wieder gelöscht, daher hat das Array die größe 1 also nur index 0 is belegt...
Ich nerv euch dann mal nicht weiter, sollte ne pause machen
Trotzdem vielen Dank für die tolle Hilfe!
Wir kennen ja deine Klasse VarArray nicht, aber so wie es aussieht: Du addest 2 mal Elemente, und löschst dann eins,demzufolge ist nach Adam Ries 2-1 = 1 Element noch im Array vorhanden, oder nicht?