Frage zum abfangen von Exceptions

  • Themenstarter Themenstarter Destiny1985
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

Destiny1985

Gast
Also, habe folgenden Code

Code:
import java.util.List;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.IndexOutOfBoundsException;

public class Bankverwaltung {

    static String inData;
    static BufferedReader userIn =
        new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args)  {

        int menueWahl = 0;
        Bank aktiveBank = null;

        List banken = new ArrayList();

        while (menueWahl != 4) {

            Leerzeilen();
            menueWahl = bankMenue();

            switch (menueWahl) {
                case 1: banken = bankAnlegen(banken);       break;
                case 2 : System.out.print("2");             break;
                case 3 : aktiveBank = bankAuswahl(banken);  break;
                case 4 : programmEnde();                    break;
            }
        }
    }

    public static int bankMenue() {

        int menueWahl = 0;

        System.out.println("*** Bankverwaltung ***\n");

        System.out.println("[1] - Neue Bank anlegen");
        System.out.println("[2] - Bank editieren");
        System.out.println("[3] - Zu einer Bank verzweigen");
        System.out.println("[4] - Programm beenden");
        System.out.print("\nIhre Wahl: ");

        try {
            inData = userIn.readLine();
        }
        catch (IOException e1) {
          System.out.print("*** FEHLER: IOException in bankMenue ***");
        }
        catch (IndexOutOfBoundsException e2) {
            System.out.println("test");
        }

        menueWahl = Integer.parseInt(inData);

        return menueWahl;
    }

    public static List bankAnlegen(List banken) {

        String name = "", blz = "";
        Leerzeilen();
        System.out.println("Neue Bank anlegen");
        System.out.println("=================\n");
        System.out.print("Name der Bank: ");
        try {
            name = userIn.readLine();
        }
        catch (IOException e1) {
            System.out.println("*** FEHLER: IOException in bankAnlegen");
        }
        System.out.print("Bankleitzahl: ");
        try {
            blz = userIn.readLine();
        }
        catch (IOException ex) {
            System.out.println("*** FEHLER: IOException in bankAnlegen");
        }

        Bank bank = new Bank(name, blz);
        banken.add(bank);

        return banken;
    }

    public static Bank bankAuswahl(List banken) {

      int bankWahl = 0;
      Bank aktiveBank;

      Leerzeilen();
      System.out.println("Zu einer Bank verzweigen");
      System.out.println("========================\n");
      for (int i = 0; i <= banken.size() - 1; i++) {
          System.out.println("[" + (i+1) + "] - " + banken.get(i));
      }

      try {
          System.out.print("\nIhre Wahl: ");
          inData = userIn.readLine();
          bankWahl = Integer.parseInt(inData);
      }
      catch (IOException e1) {
          System.out.println("*** FEHLER: IOException in bankAuswahl ***");
      }
      catch (IndexOutOfBoundsException e2) {
        System.out.println("test");
      }


      aktiveBank = (Bank) banken.get((bankWahl - 1));

      return aktiveBank;
    }

    public static void programmEnde() {
        Leerzeilen();
        System.out.println("*** Das Programm wird nun beendet ***");
        System.exit(0);
    }

    public static void Leerzeilen() {

        for (int i = 1; i <= 30; i++) {
            System.out.println();
        }
    }
}

Wenn ich jetzt eine Bank anlege und ins menü gehe, wo ich zu der bank verzweige, zeigt er mir korrekt diesen einen eintrag. mit 1 würde ich diese bank dann auch korrekt auswählen. mit 2 macht er logischerweise eine

Code:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
	at java.util.ArrayList.RangeCheck(ArrayList.java:507)
	at java.util.ArrayList.get(ArrayList.java:324)
	at Bankverwaltung.bankAuswahl(Bankverwaltung.java:127)
	at Bankverwaltung.main(Bankverwaltung.java:42)

Exception in thread "main"

Das Ding ist aber, ich hab keine Ahnung wie ich diese IndexOutOfBoundsException abfangen soll. Hab aus lauter Verzweifelung bei jedem try-catch-Block ein

Code:
catch (IndexOutOfBoundsException e2) {
        System.out.println("test");
      }

mit reingenommen. Meinem Verständnis nach sollte er nun, wenn man eine 2 eingibt, das wort "test" statt dem Fehler ausgeben...macht er aber nicht, sondern immer wieder den fehler.

was mache ich falsch ?
 
du musst dir ueberlegen, wo eine solche exception auftreten kann.

IndexOutOfBounds heisst ja, du greifst auf einen index zu den es nicht gibt.
Code:
System.out.print("\nIhre Wahl: ");
          inData = userIn.readLine();
          bankWahl = Integer.parseInt(inData);
hier wo du das catch machst greifst du aber nirgends auf einen index zu -> kann hier nicht die Exception geworfen werden

Code:
aktiveBank = (Bank) banken.get((bankWahl - 1));
hier wo du auf einen Index zugreifst (get(int index)) hast du keinen catch Block....
 
hm, die try - catch blöcke hat mir borland eingefügt, hab' mal drauf vertraut 😉

ok versuchs mal !
 
Hab es jetzt wie folgt, geändert hat sich aber nichts. Er knallt mir weiter den "originalen" Error raus

Code:
public static Bank bankAuswahl(List banken) {

      int bankWahl = 0;
      Bank aktiveBank;

      Leerzeilen();
      System.out.println("Zu einer Bank verzweigen");
      System.out.println("========================\n");
      
      for (int i = 0; i <= banken.size() - 1; i++) {
          try {
              System.out.println("[" + (i+1) + "] - " + banken.get(i));  
          }
          catch (IndexOutOfBoundsException e2) {
              System.out.println("MUH");  
          }
      }
      try {
          System.out.print("\nIhre Wahl: ");
          inData = userIn.readLine();
          bankWahl = Integer.parseInt(inData);
      }
      catch (IOException e1) {
          System.out.println("*** FEHLER: IOException in bankAuswahl ***");
      }

      aktiveBank = (Bank) banken.get((bankWahl - 1));

      return aktiveBank;
    }
 
ich glaube er meinte das du das in einen try-catch block packen solltest
Code:
aktiveBank = (Bank) banken.get((bankWahl - 1));
 
habs in einem anderen thread glaub schonmal gesagt

ich bin zZ heftig unkonzentriert irgendwie 🙁

thx...
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben