Erstes Programm - Problem mit Exception

Status
Nicht offen für weitere Antworten.

elduderado

Mitglied
Moinsen,

ich lerne gerade Java an der FH und wir müssen gerade unser erstes Programm schreiben. Dabei geht es um ein simples bearbeiten von Brüchen:

Code:
public class Bruch
	{ int zähler;
 	  int nenner;

public Bruch(int z,int n)  throws NennerNullException
	{ nenner = n;
  	  zähler = z;
  	  if(n==0) throw new NennerNullException("Nenner ist 0");
 	}

public Bruch mal(Bruch a) throws NennerNullException					
               { return new Bruch(zähler*a.zähler,nenner*a.nenner);}	 //als Ergebnis neues Bruchobjekt zurückgeben

public Bruch mal(int a) throws NennerNullException	
	{ return this.mal(new Bruch(a,1));
	}

public Bruch plus(Bruch a) throws NennerNullException						
 	{ return new Bruch(zähler*a.nenner+a.zähler*nenner,nenner*a.nenner);
 	}

public Bruch minus(Bruch a) throws NennerNullException
	{ return this.plus(new Bruch(-a.zähler,a.nenner));
  	}
						
public Bruch div(Bruch a) throws NennerNullException
	{ return this.mal(a.kehrwert());
	}

public Bruch kehrwert() throws NennerNullException
	{ return new Bruch(nenner,zähler);
	}

public String toString()					
  	{ if(nenner!=1)
    	  return new String(zähler + "/" + nenner);		//echter Bruch
   	else
     	  return new String(""+zähler);			//ganzzahliger Bruch (Nenner =1)
  	}

class NennerNullException extends Exception
	{
	private static final long serialVersionUID = 1L;
	public NennerNullException(){}         		//Default Konstruktor 
      public NennerNullException(String text){		                //Konstruktor mit Fehlertext
      super(text);
      }
	}

public int compareTo(Bruch q)
	{ double a;
	  double b;
	  a = (double)zähler / nenner;		    // (double) casted auf int zähler -> double int
	  b = (double)q.zähler / q.nenner;
	  if(a == b)
	   return 0;
	  else
	  	if(a>b)
		  return 1;
		else
		  return -1;
	}


public Bruch kürzen() throws NennerNullException
	{ int a;
	  int b;
	  a = zähler;
	  b = nenner;
	  while(a != b) {
	    if( a > b)
	      a = a-b;
	    else 
	      b = b-a;}
	   return new Bruch(zähler/a,nenner/a);
	}
}

Code:
import Bruch.NennerNullException;

public class Bruchrechnung 
{public static void main(String [] args)
  { try {
	Bruch c=new Bruch(5,4);			//Referenz auf neues Bruch-Objekt
    System.out.println("Bruch c= " + c);	                                //Ausgabe als String: automatische
    						//Umwandlung mit toString( )
    Bruch e=new Bruch(7,8);			                //leere Referenz auf einen Bruch (für Ergebnis)					
    Bruch r=c.minus(e);				//Bruch c mit Bruch e multiplizieren, Referenz auf
						//Ergebnisobjekt in r speichern
    System.out.println(c+" - "+e+" = "+r);	                                //Ausgabe als String
    Bruch w=r.kürzen();
    System.out.println("Gekürzt: "+c+" - "+e+" = "+w);
    System.out.println(c+" + "+e+" = "+c.plus(e));	                //Ergebnis ist anonymes Objekt
    Bruch h=new Bruch(2,3);		                                //Referenz auf neues Bruch-Objekt
    Bruch i=c.plus(e).mal(h);		                                //Referenz initialisiert auf Ergebnis-Objekt
    i = i.kürzen();
    System.out.println("("+c+" + "+e+") * "+h+" = "+i);
    System.out.println("Vergleich von " + c + " und " + e + " ergibt: " +c.compareTo(e));
  }
    catch(NennerNullException n0){
      System.out.println("fehlerhafter Bruch:"+ n0.getMessage()+ ", Abbruch!\nStackTrace:");
      n0.printStackTrace();
    }
  }
  
}

Warum sagt Eclipse mir in Bruchrechnung:" NennerNullException cannot be resolved to a type"? Und gibt es nicht eine geschicktere Möglichkeit, als immer hinter eine Methode "throws NennerNullException" zu schreiben??

Ich hab mir schon ein paar Beiträge + Websites bezüglich exceptions durchgelesen und es funktioniert doch immer dach dem Prinzip... eine Methode throws eine exception und das catch fängt sie, oder nicht?

Vielen Dank im Vorraus.
 

ps

Bekanntes Mitglied
Code:
import Bruch.NennerNullException;

Das import statement ist falsch.. es gibt ja kein package "Bruch". Man kann afaik keine inner classes (oder exceptions) importieren. Man importiert die Containerklasse und referenziert von dort:
Code:
try {
} catch (Bruch.NennerNullException ex) {
}

Und gibt es nicht eine geschicktere Möglichkeit, als immer hinter eine Methode "throws NennerNullException" zu schreiben??

Es gibt noch die sogenannten unchecked exceptions. Diese müssen nicht mit try{}catch{} gefangen werden sondern treten zur Laufzeit auf. Diese leitet man dann von "RuntimeException" ab anstatt von "Exception".

Es kommt halt immer darauf an was man erreichen möchte... wenn ich definierte Fehlerfälle habe so sollte man schon immer eine checked Exception benutzen. Den Benutzer meiner Schnittstelle/Klasse zu zwingen jede noch so kleine Exception zu fangen ist aber auch nicht zielführend.. in diesem Fall würde ich das einfach so handhaben wie Java selbst:
-> http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArithmeticException.html

Mein Vorschlag:

Code:
public class Bruch {

    int z?hler;
    int nenner;

    public Bruch(int z, int n) {
        nenner = n;
        z?hler = z;
        if (n == 0) {
            throw new ArithmeticException("/ by zero");
        }
    }

    public Bruch mal(Bruch a) {
        return new Bruch(z?hler * a.z?hler, nenner * a.nenner);
    }    //als Ergebnis neues Bruchobjekt zur?ckgeben

    public Bruch mal(int a) {
        return this.mal(new Bruch(a, 1));
    }

    public Bruch plus(Bruch a) {
        return new Bruch(z?hler * a.nenner + a.z?hler * nenner, nenner * a.nenner);
    }

    public Bruch minus(Bruch a) {
        return this.plus(new Bruch(-a.z?hler, a.nenner));
    }

    public Bruch div(Bruch a) {
        return this.mal(a.kehrwert());
    }

    public Bruch kehrwert() {
        return new Bruch(nenner, z?hler);
    }

    public String toString() {
        if (nenner != 1) {
            return new String(z?hler + "/" + nenner);      //echter Bruch
        } else {
            return new String("" + z?hler);         //ganzzahliger Bruch (Nenner =1)
        }
    }

    public int compareTo(Bruch q) {
        double a;
        double b;
        a = (double) z?hler / nenner;          // (double) casted auf int z?hler -> double int
        b = (double) q.z?hler / q.nenner;
        if (a == b) {
            return 0;
        } else if (a > b) {
            return 1;
        } else {
            return -1;
        }
    }

    public Bruch kürzen() {
        int a;
        int b;
        a = z?hler;
        b = nenner;
        while (a != b) {
            if (a > b) {
                a = a - b;
            } else {
                b = b - a;
            }
        }
        return new Bruch(z?hler / a, nenner / a);
    }
}

Du kannst die ArithmeticException natürlich auch durch eine eigene Exception austauschen - so wie es jetzt ist hast du das selbe verhalten wie wenn du java einen integer / 0 rechnen lässt.
 

elduderado

Mitglied
Danke ps,

ich hab mich von den Vorschlägen, die Eclipse mir gegeben hat,wohl irreführen lassen. Klar gibt es kein package Bruch ;) und nachdem ich die NennerNullException auf Bruch zugewiesen hab, funktioniert es wunderbar.

Das es die "standart" Exceptions gibt wusste ich, aber nicht, dass ich kein throws dafür setzen muss. Ich versteh nicht, warum ich in allen anderen Methoden, die einen neuen Bruch erstellen ein throw setzen muss... das macht doch shcon der Konstruktor oder nicht?

Vielen Dank,
 

Murray

Top Contributor
elduderado hat gesagt.:
Ich versteh nicht, warum ich in allen anderen Methoden, die einen neuen Bruch erstellen ein throw setzen muss... das macht doch shcon der Konstruktor oder nicht?
Genau das ist ja das Problem - wenn im Konstruktor eine checked exception deklariert wird, dann muss jeder Code, der diesen Konstruktor verwendet, mit dieser Exception rechnen (und sie entweder behandeln oder aber selbst als im Rahmen dieses Codes möglicherweise zu erwartende Exception deklarieren)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Erstes Programm - Problem beim Ausführen als jar Java Basics - Anfänger-Themen 3
O Erstes Programm: Matrizen Multiplikation Java Basics - Anfänger-Themen 10
D Auswahl und Ausgabe erstes Programm Java Basics - Anfänger-Themen 8
M Mein erstes Programm Java Basics - Anfänger-Themen 3
T erstes kleines Programm Java Basics - Anfänger-Themen 17
M Erste Schritte Erstes Programm mit Compiler öffnen Java Basics - Anfänger-Themen 4
M Mein erstes Java Programm Java Basics - Anfänger-Themen 5
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
1 Mein erstes Programm, HELP!! Java Basics - Anfänger-Themen 2
A Erstes Programm: Polynom-Klasse Java Basics - Anfänger-Themen 15
D Mein erstes Programm flackert Java Basics - Anfänger-Themen 5
W Erste Schritte erstes Programm Java Basics - Anfänger-Themen 40
W Erstes eigens Programm - Klassen- und Schüler Verwaltungsprogramm Java Basics - Anfänger-Themen 5
M Erstes "sinnvolles" Programm Java Basics - Anfänger-Themen 11
B Methoden Mein erstes Programm - und gleich Probleme Java Basics - Anfänger-Themen 6
R [CODECHECK] Erstes Programm Java Basics - Anfänger-Themen 6
M Erstes Programm und Fehlermeldung Java Basics - Anfänger-Themen 5
M Sammlung von Anfängerfragen für mein erstes Programm Java Basics - Anfänger-Themen 15
G Erstes Java-Programm Java Basics - Anfänger-Themen 10
L Suche Verbesserungsvorschläge für mein erstes Programm Java Basics - Anfänger-Themen 34
Bierhumpen mein erstes großes Programm. Was ändern? verbessern? Java Basics - Anfänger-Themen 12
A Mein erstes Programm Java Basics - Anfänger-Themen 6
T Erstes Programm Java Basics - Anfänger-Themen 7
B Erstes Programm :-/ Java Basics - Anfänger-Themen 3
Alen123 Erstes Arbeiten mit Methoden. Java Basics - Anfänger-Themen 5
Igig1 Autoparkplatz verkettete Liste erstes und letztes Auto Java Basics - Anfänger-Themen 13
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
I Letztes, erstes Element vom Array Java Basics - Anfänger-Themen 9
X Array erstes und letztes Element tauschen Java Basics - Anfänger-Themen 2
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
J erstes Vorkommen eines chars entfernen Java Basics - Anfänger-Themen 1
H java erstes projekt Java Basics - Anfänger-Themen 502
M OOP Mein erstes Textadventure... Java Basics - Anfänger-Themen 3
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
V Erste Schritte Erstes Project - Hilfe Java Basics - Anfänger-Themen 9
J Erstes Applet läßt sich nicht anzeigen Java Basics - Anfänger-Themen 2
M Erstes Textrollenspiel funktioniert...nicht. Java Basics - Anfänger-Themen 2
L Erstes Projekt aus zwei Projekten Java Basics - Anfänger-Themen 1
T mein erstes Java projekt Java Basics - Anfänger-Themen 8
T OOP Mein erstes Java-Spiel - Schiffe versenken! Java Basics - Anfänger-Themen 2
M Erstes Prog. OS Abfrage Java Basics - Anfänger-Themen 9
E Mein erstes Java Projekt - Sauberer code? Java Basics - Anfänger-Themen 28
B Erstes Element eines Vectors erhalten Java Basics - Anfänger-Themen 5
A Textdatei einlesen - erstes Zeichen falsch Java Basics - Anfänger-Themen 20
I Liste Remove erstes Element Java Basics - Anfänger-Themen 5
J Bald erstes Java Buch durchgearbeitet - Wie gehts nun weiter? Java Basics - Anfänger-Themen 6
T Erstes Zeichen aus String löschen Java Basics - Anfänger-Themen 8
J erstes Prog./Klasse - Konstruktur/Objekterstellung funktioniert nicht Java Basics - Anfänger-Themen 25
B erstes Java-Applet Java Basics - Anfänger-Themen 7
M Erstes Zeichen in einem String in Großbuchstaben wandeln Java Basics - Anfänger-Themen 3
C Erstes Arraylist Element in for Schleife überspringen Java Basics - Anfänger-Themen 6
G Feststellen, ob erstes Zeichen eines Strings eine Ziffer ist Java Basics - Anfänger-Themen 11
M Serialisierung erstes Beispiel Java Basics - Anfänger-Themen 4
A erstes größeres Projekt Java Basics - Anfänger-Themen 14
P Mein erstes JAR-File Java Basics - Anfänger-Themen 8
G erstes Zeichen eines Strings herausfinden Java Basics - Anfänger-Themen 3
G erstes element einer haspmap Java Basics - Anfänger-Themen 5
G erstes Arbeiten mit Collections Java Basics - Anfänger-Themen 17
G erstes Arbeiten mit Packages Java Basics - Anfänger-Themen 2
T Erstes RPG: KeyAdapter Problem Java Basics - Anfänger-Themen 3
M erstes Zeichen ersetzen Java Basics - Anfänger-Themen 2
C Konstruktor wird nicht als erstes aufgerufen! Java Basics - Anfänger-Themen 11
O mit Regex erstes Zeichen überprüfen Java Basics - Anfänger-Themen 3
D JNDI-DataSource erstes mal benutzen Java Basics - Anfänger-Themen 4
C Erstes kleines Problem - string in chat ? Java Basics - Anfänger-Themen 9
M Erstes Element einer Enumeration? Java Basics - Anfänger-Themen 6
A Erstes Buch durchgelesen, wie weiter vorgehen? Java Basics - Anfänger-Themen 8
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Ü Dead Code im Programm? Java Basics - Anfänger-Themen 13
M Java Mail Programm Java Basics - Anfänger-Themen 4
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
M Mini Jar-Programm Java Basics - Anfänger-Themen 51
G JTable Listselectionlistener friert das Programm ein Java Basics - Anfänger-Themen 8
M Das Programm stellt nichts dar Java Basics - Anfänger-Themen 2
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
Z Programm Ideen Java Basics - Anfänger-Themen 8
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
T Programm stürzt ab Java Basics - Anfänger-Themen 40
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
Jul1n4tor Programm mit Scanner und If-Statements Java Basics - Anfänger-Themen 2
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
K Ist das Programm schlecht bzw. schlampig programmiert ? Java Basics - Anfänger-Themen 9
Zrebna Kann Java Programm nicht in Konsole ausführen Java Basics - Anfänger-Themen 1
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
M Von Eclipse zum richtigen Programm Java Basics - Anfänger-Themen 1
nbergmann IntelliJ: Wie lade ich ein fertiges Programm aus dem Lehrbuch? Java Basics - Anfänger-Themen 26
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 22
I Jetty starten von Programm (Main) Java Basics - Anfänger-Themen 27
Kydo Programm Beschreibung Java Basics - Anfänger-Themen 3
nbergmann Eclipse: Lehrbuch-Programm startet nicht Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben