Abfangen von Fehlern

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Gumo,

kann mir bitte jemand helfen?

Code:
  System.out.print("1. Zahl eingeben: ");
         zahl1 = Double.parseDouble(eingabe.readLine()); // Einlesen von Zahlen
         System.out.print("Operator eingeben: ");
         char operator;
         Eingabe2 =eingabe.readLine();
         operator = Eingabe2.charAt(0); // Einlesen von Operatoren als char



Ich habe meinen alten Taschenrechner ausgekrammt und wollte den nun endlich verbessern, für die Prüfungsleistung.
Wir haben die Aufgabe, ein Bubblesort, einen Taschenrechner und eine Kontoklasse abzugeben.

Und am ende des Semesters noch ne Prüfung -.- .

Naja hier gehts mir gerade wie man den Feher in der Eingabe des Operatoren abfangen kann.

Die Zahlen kann ich ja durch try und catch abfangen, da ich diese als Double einlese. Er gibt bei Buchstaben sofort eine Exception in thread "main" java.lang.NumberFormatException: aus und das ist ja dann kein problem.

Doch ist mein Operator char. Und char kann sowohl Buchstaben oder auch Zahlen sein.

Sollte ich eine IF Abfrage noch mit einbauen ? Das wäre dann schon meine 5te in diesen code ....!

Danke für hilfe
 

diggaa1984

Top Contributor
du kannst n char-array anlegen mit allen gültigen operatoren und dann mit if :D ... prüfen ob die eingabe enthalten ist. Da wirst nich drumrum kommen
 

Spin

Top Contributor
Ok , denn lasse ich es erstmal sein. Muss die Kontoklasse fertig bekommen. An der Sitze ich bestimmt auch noch 2std.
 

Marco13

Top Contributor
Sollte ich eine IF Abfrage noch mit einbauen ? Das wäre dann schon meine 5te in diesen code ....!

Vezeih' bitte die lapidar formulierte Frage, aber ...: Na und? ???:L
 

diggaa1984

Top Contributor
Sollte ich eine IF Abfrage noch mit einbauen ? Das wäre dann schon meine 5te in diesen code ....!

Ich habe meinen alten Taschenrechner ausgekrammt und wollte den nun endlich verbessern

vielleicht kannst du ja ne paar der anderen wegrationieren :D
 

Spin

Top Contributor
Stimmt marko, na und ^^



Da hast du recht. Ich mach das nachher mal, bin aber gerade bei einer anderen Überprüfung :(

Kann da mal einer rüber schauen?

Code:
 /*public void ÜberprüfeString() throws IOException
                
       {
           Kontoklasse a = new Kontoklasse();
        
           
           if(!eingabe.readLine().isEmpty())
           {
           System.out.println("Falsche Eingabe" + "\t"+ " Starten Sie das Programm neu.");
           }
         }*/
        

void einzahlen() throws IOException
{
    System.out.println("Geben Sie an wie viel Geld Sie auf Ihren Konto einzahlen möchten");
                            zahl = Double.parseDouble(eingabe.readLine());
                     
                             neuerKontostand = addieren(zahl,kontostand);
                           
                             System.out.println("Ihr neuer Kontostand lautet:" + neuerKontostand);
                             System.out.println("Danke für Ihren Besuch");
    
}
 
void auszahlen() throws IOException
{
  System.out.println("Geben Sie an wie viel Geld Sie von Ihren Konto abholen möchten");
                            zahl1 = Double.parseDouble(eingabe.readLine());
                            neuerKontostand = subtrahieren(kontostand,zahl1);
                            System.out.println("Ihr neuer Kontostand lautet:" + neuerKontostand);
                              
}

/*public static double neuerwert(double x, double y)
{
    double neuerk = neuerKontostand + addieren(zahl1,kontostand);
    return neuerk;
}*/
void zinsen()throws IOException // 1.1.2008 - heute
{

System.out.println("Der Zinssatz beträgt 4%");
System.out.println("Wie lange möchte Sie ihr Geld verzinsen( Angabe in Monaten)");
  monat= Double.parseDouble(eingabe.readLine());
  double monat1=(monat*(1.0/3.0));
  Zinsertrag = ((neuerKontostand*monat1)/100) + neuerKontostand;
 
 
 System.out.println("Ihr neuer Kontostand lautet: " + Zinsertrag);



}

public static String erzeugePIN()
   {
       Random a = new Random();
       pin = Math.abs(a.nextInt()%10000);
       if (pin < 1) return "0000";
       if (pin < 10) return "000"+pin;
       if (pin < 100) return "00"+pin;
       if (pin < 1000) return "0"+pin;
       return ""+pin;
   }
   
  
       
       
       
       
       
       
       
       
       
       
 public void run() throws IOException
      {
        // benoetigte Variablen
        Kontoklasse kk = new Kontoklasse(); // Instanzierung
        kk.setkontonummer(453345443); // Kontonummer setzen
        kk.setblz(13061078);
    
    // Ausgabe
    System.out.println("Herzlich Willkommen bei Ihrer Bank");
    //Schleifenbeginn
    while(!fertig)
    {//Menue
     System.out.println("");
     System.out.println("Sie haben nun folgende Auswahlmöglichkeiten: "+
     "\n"+ "1. Konto neu anlegen" + "\n" + "2.Konto einloggen (PIN erforderlich)" + "\n"+ "3.Beenden");
     int auswahl = Integer.parseInt(eingabe.readLine());

    //Fallunterscheidung
    switch (auswahl)
    {//Konto anlegen
        case 1:
     
     
            System.out.println("Bitte geben Sie ihren Namen an:");
              kk.setName(eingabe.readLine());
             
            
       
             System.out.println("Bitte geben Sie ihren Vornamen an:");
             kk.setVorname( eingabe.readLine());
        
      
      
       
        System.out.println("Die von Ihnen eigegebenen Daten lauten:"+
                            "\n"+ "Name:" + kk.getName()+
                            "\n"+"Vorname:" + kk.getVorname());
                            
        
        System.out.println("Zusätzlich bekommen Sie noch folgende Daten +" +
                            "\n" +"Kontonummer "+ kk.getkontonummer()+
                            "\n" +"Bankleitzahl "+ kk.getblz() +
                            "\n" +"Pin "+ kk.erzeugePIN() );

        
       
        break;


        case 2: System.out.println("Bitte geben Sie ihren Pin ein");
                int nummer = Integer.parseInt(eingabe.readLine());
                
                if(nummer == pin)
                {System.out.println("Sie haben sich erfolgreich eingeloggt");
                
                System.out.println("Ihr Kontostand beträgt derzeit: " + kontostand);
                System.out.println("Was möchten Sie nun tun: " + "\t"+ "1.Einzahlung"+ "\t"+ "2.Auszahlung");
                int auswahl1 = Integer.parseInt(eingabe.readLine());
                     switch(auswahl1)
                     {
                    case 1: kk.einzahlen();
                           System.out.println("Möchten Sie ihren Kontostand anschließend noch verzinsen dann drücken Sie bitte die 1, " +
                                               "zum Beenden bitte die 2.");
                           zahl2=Integer.parseInt(eingabe.readLine());
                           if(zahl2 == 1)
                           {
                           kk.zinsen();
                           }
                           if(zahl2==2)
                           {fertig =true;}
                           // kk.neuerwert(neuerKontostand, kontostand);
                    break;
                    case 2:kk.auszahlen();
                    break;

                    default: System.out.println("Falsche eingabe");
                    break;
                }
                
                
                }
                else
                 {System.out.println("Fehler beim Einloggen");}




Ich habe mir mal angweöhnt den ganzen Quelletxt zu posten, denn einige können mit meinen Teilausschnitten nichts anfangen ..-.-.

Also ich möchte gerne hier meine Eingabe bei Vorname und Nachname überprüfen. Wenn ein Fehler auftritt soll auch das Programm beendet werden.


Code:
/*public void ÜberprüfeString() throws IOException
                
       {
           Kontoklasse a = new Kontoklasse();
        
           
           if(!eingabe.readLine().isEmpty())
           {
           System.out.println("Falsche Eingabe" + "\t"+ " Starten Sie das Programm neu.");
           }
         }*/


Ich dachte ich könnte es hiermit versuchen , aber dann macht das programm nicht was es soll.


Wenn ich also jetzt:

System.out.println("Bitte geben Sie ihren Namen an:");
kk.setName(eingabe.readLine());


System.out.println("Bitte geben Sie ihren Namen an:");
kk. ÜberprüfeString();

benutze klappts nicht.

Ich hatte natürlich in meiner Methode auch erst noch a.setName(eingabe.readLine());


Danke
 

Ravendark

Aktives Mitglied
Zu der Überprüfung:
Das Negationszeichen in der if-Abfrage muss weg...es soll doch nur ein Fehler gemeldet werden wenn der String leer ist.
Jetzt wird eine Fehlermeldung ausgegeben wenn der String nicht leer ist.
 

Spin

Top Contributor
Code:
 case 1:     Kontoklasse a = new Kontoklasse();
                    System.out.println("Bitte geben Sie ihren Namen an:");
                    name =(eingabe.readLine());
                    if (!a.nameOkay(name))
                     {
                     
                     System.out.println("Eingabefehler");
                     System.exit(0);
                   
                     }



Code:
private static boolean nameOkay(String name) {
 if (name == null || name.isEmpty()) // wenn keine Werte in die eingabe einfließen = Rückgabe false !
  return false;

 // zum Beispiel (ansonsten evtl. Regex)
 char[] ca = name.toCharArray(); // Der eingegbene String wird in ein CharArray verwandelt und anschließend wird jedes einzelne Zeiche
 for (char c : ca)               // überprüft.
  if (!Character.isLetter(c)) // aufrufen  der isLetter Methode von Klasse Character um zu prüfen ob es sich um einen Buchstaben handelt
   return false; // wenn es sich um keinen Buchstaben handelt = false.

 return true;
}



Ich habe das jetzt anders gemacht und eine Methode geschrieben.

Mit System.exit(0) beende ich auch wunderbar meine Klasse :)


Gibt es da auch noch eine andere Möglichkeit?
Weiterhin was bedeutet: Accessing static method ?

Mein Objekt wird gelb ( netbeans) untersrichen. Hat mein Objekt probleme mit einer statischen Methode?

Aso , bestimmt weil mein Objekt in der Methode Instanziert wurde und die Methode eine Klassenmethode ist.
Aber wenn ich mein Ojekt als Klassenobjekt mache, dass sagt er mir HEAP space fehler.

danke, gruß spin
 

fjord

Bekanntes Mitglied
Beim Überfliegen ist mir etwas aufgefallen, unabhängig von deiner Frage, was du noch verbessern kannst.
Und zwar bei:
Spin hat gesagt.:
Code:
public static String erzeugePIN()
{
   Random a = new Random();
   pin = Math.abs(a.nextInt()%10000);
   if (pin < 1) return "0000";
   if (pin < 10) return "000"+pin;
   if (pin < 100) return "00"+pin;
   if (pin < 1000) return "0"+pin;
   return ""+pin;
}

Code:
Math.abs(a.nextInt()%10000)
ist keine gute Idee. Nehmen wir mal theoretisch an, dass a.nextInt() eine Zahl zwischen 0 und 15000 zurückgibt. Nimmt man das modulo 10000, so sind die Zahlen von 0 bis 5000 doppelt so wahrscheinlich wie die Zahlen von 5001 bis 9999, weil ja 10000 bis 15000 auch auf 0 bis 5000 gelegt werden. (Auf das Math.abs() kannst du verzichten.)
Besser ist hier:
Code:
pin = a.nextInt(10000);
nextInt(int n) gibt eine Zahl zwischen 0 (inklusive) und n (exklusive) zurück und stellt dabei sicher, dass alle Zahlen dieselbe Wahrscheinlichkeit haben.

Den 2. Teil könntest du auch noch etwas kürzer formulieren, wenn du willst.
Statt:
Code:
if (pin < 1) return "0000";
if (pin < 10) return "000"+pin;
if (pin < 100) return "00"+pin;
if (pin < 1000) return "0"+pin;
würde hier ein
Code:
return String.format("%04d", pin);
reichen.
Falls du dich mit Stringformatierung noch nicht auskennst:
Das "d" am Ende bedeutet, dass "pin" als Dezimalzahl formatiert wird, die "4" bedeutet, dass die Zahl mindestens die Länge 4 haben soll und die "0" bedeutet, dass die Zahl mit führenden 0en ergänzt wird, falls die Zahl kürzer als 4 ist.

Komplett würde es dann so aussehen:
Code:
 public static String erzeugePIN()
   {
       Random a = new Random();
       pin = a.nextInt(10000);
       return String.format("%04d", pin);
   }

Zu der Frage nach "Accessing static method":
Du machst fast alle Methoden statisch und greifst auf eine dieser Methoden zu, indem du eine Instanz angibst.
Konkret:
Code:
Kontoklasse a = new Kontoklasse();
[...]
if (!a.nameOkay(name))
nameOkay ist aber als statisch definiert:
Code:
private static boolean nameOkay(String name)

Das richtige Vorgehen wäre den Klassennamen anzugeben, also
Code:
if (!Kontoklasse.nameOkay(name))

Es gibt übrigens keinen Grund nur mit statischen Methoden zu arbeiten. :wink:
 

Spin

Top Contributor
Vielen vielen Dank.

Ich habe nun kein einzigen Fehler mehr in meiner Klasse , jippie. Das ganze ist nicht zu hundertprozent perfekt aber es funktionert soweit , wie es auch variablen und methoden hat :)

Viele dank an alle. Ich werde mich dann mit neuen Themen auseinander setzen. Und @fjord

danke für Erklärung, sonst hätte ich noch mal fragen müssen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
Dimax SizeLimitExceededException abfangen Java Basics - Anfänger-Themen 6
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
L Erste Schritte IndexOutOfBounce abfangen? Java Basics - Anfänger-Themen 17
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
B Erste Schritte Abfangen eines Fehlers/Ausbrechen aus der Schleife Java Basics - Anfänger-Themen 12
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
D Input/Output Runtime().exec fehler abfangen Java Basics - Anfänger-Themen 4
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
P Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung Java Basics - Anfänger-Themen 7
S java tastendrücke direkt abfangen und printen Java Basics - Anfänger-Themen 3
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
OnDemand Exception Abfangen Java Basics - Anfänger-Themen 5
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
H Wie kann ich STRG+V abfangen und ändern Java Basics - Anfänger-Themen 2
B Exception abfangen Java Basics - Anfänger-Themen 33
D [jni] loadLibrary Exception abfangen Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
W Tastatureingabe abfangen Java Basics - Anfänger-Themen 15
S Exception abfangen Java Basics - Anfänger-Themen 2
N Fehlerquelle leere ArrayList elegant abfangen Java Basics - Anfänger-Themen 3
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
M Datentypen Fehler abfangen Java Basics - Anfänger-Themen 5
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
sylo Warnings abfangen Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
H MouseEvent abfangen Java Basics - Anfänger-Themen 9
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Spin Exception abfangen Java Basics - Anfänger-Themen 3
M Frage zum Abfangen ungültiger Werte Java Basics - Anfänger-Themen 9
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
A FileNotFoundException abfangen? Java Basics - Anfänger-Themen 3
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
M Exception abfangen? Java Basics - Anfänger-Themen 3
G Eine exception mit negativen zahlen abfangen ? Java Basics - Anfänger-Themen 11
I Dialog - "Ja" / "Nein" abfangen Java Basics - Anfänger-Themen 3
G SQLServerException abfangen Java Basics - Anfänger-Themen 2
C alle möglichen Datumseingaben im Textfeld abfangen Java Basics - Anfänger-Themen 12
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
M Abfangen von java.lang.NumberFormatException Java Basics - Anfänger-Themen 6
T String: NeueZeile (" ") , Break etc. abfangen Java Basics - Anfänger-Themen 2
B Programm würft Exception, kann sie aber nicht abfangen! Java Basics - Anfänger-Themen 25
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
M jToggleButton Klick abfangen ohne den Button zu deaktivieren Java Basics - Anfänger-Themen 2
B Tastatur abfangen Java Basics - Anfänger-Themen 11
U Pfeiltasten abfangen Java Basics - Anfänger-Themen 2
B Ausnahmen abfangen Java Basics - Anfänger-Themen 3
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
T jcombobox, item-selektierung abfangen Java Basics - Anfänger-Themen 5
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
S von CommandLine übergebene Parameter abfangen? Java Basics - Anfänger-Themen 12
V Mausklick mit rechter Taste abfangen? Java Basics - Anfänger-Themen 8
C falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
L GUI - Tastaturereignisse abfangen ohne Fokus? Java Basics - Anfänger-Themen 8
D Frage zum abfangen von Exceptions Java Basics - Anfänger-Themen 5
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
F Exception in while-Schleife abfangen? Java Basics - Anfänger-Themen 2
F 2 numberformatexception abfangen? Java Basics - Anfänger-Themen 20
ven000m Exception abfangen Java Basics - Anfänger-Themen 9
H JTabel Selectionen abfangen Java Basics - Anfänger-Themen 2
L Java App + Exception abfangen Java Basics - Anfänger-Themen 2
G Fehler abfangen Java Basics - Anfänger-Themen 2
D Falscheingaben abfangen Java Basics - Anfänger-Themen 8
M Negative Werte abfangen Java Basics - Anfänger-Themen 18
G Abfangen von Falscheingaben Java Basics - Anfänger-Themen 4
C Exception abfangen->Klappt nicht ;( Java Basics - Anfänger-Themen 2
S Division durch null abfangen :freak: Java Basics - Anfänger-Themen 14
EagleEye Exception abfangen Java Basics - Anfänger-Themen 15
C Kann mir jemand helfen was mit diesen Fehlern gemeint ist ? Java Basics - Anfänger-Themen 12
B Suche Programme mit Fehlern Java Basics - Anfänger-Themen 9
K Wahrheitstabelle mit Fehlern Java Basics - Anfänger-Themen 14
N Brauche dringend hilfe! Prog mit Fehlern Java Basics - Anfänger-Themen 2
A Prog mit fehlern Java Basics - Anfänger-Themen 12
S Quelltext mit Fehlern Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben