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:
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.
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.