# Division durch null abfangen :freak:



## Skauuwix (10. Nov 2004)

Also, ich hab in der schule ein projekt bei dem ich ein Taschenrechner programmieren soll! ich bin mitlerweile schon weit gekommen, aber ich schaff es einfach nicht den fehler, das man nicht durch null teilen kann, abzufangen. Also ich hoff ihr versteht was ich meine. 
Jeder tipp ist hilfreich, danke im voraus. 



```
import java.awt.*; 
import java.awt.event.*; 
public class Taschenrechner extends Frame 
implements WindowListener,ActionListener 
{ 
Label l1; 
TextField t1; 
Button b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, 
bplus, bminus, bmal, bgleich, bpunkt, bclear, bgeteilt; 
boolean Rechne=true; 
double Zahl = 0; 
String Operation=""; 

/** 
* erstellt die Oberflaeche des Taschenrechners 
**/ 
public Taschenrechner() 

{Frame window = new Frame(""); 
window.addWindowListener(this); 
window.setTitle("Roche"); 
window.setSize(165,280); 
window.setLocation(200,200); 
window.setBackground(Color.black); 
/** 
* erstellt das Anzeigefeld des Taschenrechners 
**/ 
t1= new TextField(""); 
t1.setSize(125,20); 
t1.setLocation(20,40); 
t1.setEditable(false); 
t1.setBackground(Color.white); 
window.add(t1); 
/** 
* erstellt die Buttons (0-9) des Taschenrechners 
**/ 
b7= new Button("7"); 
b7.setBackground(Color.white); 
b7.setSize(30,25); 
b7.setLocation(20,110); 
b7.addActionListener(this); 

window.add(b7); 

b8= new Button("8"); 
b8.setSize(30,25); 
b8.setLocation(50,100); 
b8.addActionListener(this); 
b8.setBackground(Color.white); 
window.add(b8 ); 

b9= new Button("9"); 
b9.setSize(30,25); 
b9.setLocation(80,110); 
b9.addActionListener(this); 
b9.setBackground(Color.white); 
window.add(b9); 

b4= new Button("4"); 
b4.setSize(30,25); 
b4.setLocation(20,140); 
b4.addActionListener(this); 
b4.setBackground(Color.white); 
window.add(b4); 

b5= new Button("5"); 
b5.setSize(30,25); 
b5.setLocation(50,130); 
b5.addActionListener(this); 
b5.setBackground(Color.white); 
window.add(b5); 

b6= new Button("6"); 
b6.setSize(30,25); 
b6.setLocation(80,140); 
b6.addActionListener(this); 
b6.setBackground(Color.white); 
window.add(b6); 

b1= new Button("1"); 
b1.setSize(30,25); 
b1.setLocation(20,170); 
b1.addActionListener(this); 
b1.setBackground(Color.white); 
window.add(b1); 

b2= new Button("2"); 
b2.setSize(30,25); 
b2.setLocation(50,160); 
b2.addActionListener(this); 
b2.setBackground(Color.white); 
window.add(b2); 

b3= new Button("3"); 
b3.setSize(30,25); 
b3.setLocation(80,170); 
b3.addActionListener(this); 
b3.setBackground(Color.white); 
window.add(b3); 

b0= new Button("0"); 
b0.setSize(30,25); 
b0.setLocation(50,190); 
b0.addActionListener(this); 
b0.setBackground(Color.white); 
window.add(b0); 

/** 
* erstellt die Operator-Buttons (C, +, -, *, /, =, .) des Taschenrechners 
**/ 
bclear= new Button("C"); 
bclear.setSize(20,15); 
bclear.setLocation(115,70); 
bclear.addActionListener(this); 
bclear.setBackground(Color.red); 
window.add(bclear); 


bplus= new Button("+"); 
bplus.setSize(30,55); 
bplus.setLocation(115,190); 
bplus.addActionListener(this); 
bplus.setBackground(Color.red); 
window.add(bplus); 



bminus= new Button("-"); 
bminus.setSize(30,25); 
bminus.setLocation(115,130); 
bminus.addActionListener(this); 
bminus.setBackground(Color.red); 
window.add(bminus); 


bpunkt= new Button("."); 
bpunkt.setSize(30,25); 
bpunkt.setLocation(20,220); 
bpunkt.addActionListener(this); 
bpunkt.setBackground(Color.red); 
window.add(bpunkt); 

bgleich= new Button("="); 
bgleich.setSize(60,25); 
bgleich.setLocation(52,220); 
bgleich.addActionListener(this); 
bgleich.setBackground(Color.red); 
window.add(bgleich); 

bmal= new Button("*"); 
bmal.setSize(30,25); 
bmal.setLocation(115,160); 
bmal.addActionListener(this); 
bmal.setBackground(Color.red); 
window.add(bmal); 

bgeteilt= new Button("/"); 
bgeteilt.setSize(30,25); 
bgeteilt.setLocation(115,100); 
bgeteilt.addActionListener(this); 
bgeteilt.setBackground(Color.red); 
window.add(bgeteilt); 
/** 
* macht die Oberfläche des Taschenrechners sichtbar 
**/ 
l1= new Label("");window.add(l1); 
window.setVisible(true); 
}//Ende Taschenrechner 


/** 
* Wird aufgerufen, wenn das Fenster geschlossen wird 
**/ 
public void windowClosing(WindowEvent e) 
{System.exit(0);} 
/** 
* Wird aufgerufen, wenn das Fenster aktiviert wird 
**/ 
public void windowActivated(WindowEvent e){} 
/** 
* Wird aufgerufen, wenn das Fenster mit dispose() geschlossen wurde 
**/ 
public void windowClosed(WindowEvent e){} 
/** 
* Wird aufgerufen, wenn das Fenster deaktiviert wird 
**/ 
public void windowDeactivated(WindowEvent e){} 
/** 
* Wird aufgerufen, wenn das Fenster wieder hochgeholt wird 
**/ 
public void windowDeiconified(WindowEvent e){} 
/** 
*Wird aufgerufen, wenn das Fenster zum Icon verkleinert wird 
**/ 
public void windowIconified(WindowEvent e){} 
/** 
*Wird aufgerufen, wenn Fenster geöffnet wurde 
**/ 
public void windowOpened(WindowEvent e){} 

  /** 
* Erkennung von Eingaben 
**/ 
public void actionPerformed(ActionEvent ea) 
{ 
  int h; 
  String inh = new String(); 
  

  String but=ea.getActionCommand(); 
  if (but=="0"){ziffer("0");} 
  else if (but=="1"){ziffer("1");} 
  else if (but=="2"){ziffer("2");} 
  else if (but=="3"){ziffer("3");} 
  else if (but=="4"){ziffer("4");} 
  else if (but=="5"){ziffer("5");} 
  else if (but=="6"){ziffer("6");} 
  else if (but=="7"){ziffer("7");} 
  else if (but=="8"){ziffer("8");} 
  else if (but=="9"){ziffer("9");} 
  else if (but=="+"){verkn("+");} 
  else if (but=="-"){verkn("-");} 
  else if (but=="*"){verkn("*");} 
  else if (but=="/"){verkn("/");} 
  else if (but==".") 
  { 
   if (Rechne) {t1.setText("0.");Rechne = false;} 
   else 
   { 
    inh = new String(t1.getText()); 
    h = inh.indexOf("."); 
    if (h < 0) {t1.setText(t1.getText() + ".");} 
   }//else 
  } 
  else if (but=="C") 
  { 
   t1.setText(""); 
   Rechne=true; 
   Zahl=0; 
   Operation=""; 
  } 
  else if (but=="="){verkn("");} 
}//Ende actionPerformed 

/** 
* schreib in Display 
**/ 
  public void ziffer(String s) 
  { 
   if (Rechne) {t1.setText(s);Rechne = false;} 
   else 
   { 
    String inh = new String(t1.getText()); 
    /**zähle die Punkte**/ 
    int h = inh.indexOf("."); 
    /**bei 6 ohne punkt oder 25 mit punkt**/ 
    if (((h<0)&&(inh.length()<6)) || ((h>0)&&(inh.length()<25))) t1.setText(t1.getText() + s); 
    else return; 
   } 
  }//Ende ziffer 
  
/** 
* durchführung der Rechnung 
**/ 
  public void verkn(String s) 
  { 
   Double wert; 
   Rechne = true; 
   try 
   { 
    if (Operation=="") 
    {    
     wert=new Double(t1.getText()); 
     Zahl= wert.doubleValue(); 
     Operation=s; 
    } 
    else 
    { 
     String wert_str = new String(t1.getText()); 
     wert=new Double(t1.getText()); 
     if (Operation=="+") 
     {Zahl=Zahl+wert.doubleValue();} 
     else if (Operation=="-") 
     {Zahl=Zahl-wert.doubleValue();} 
     else if (Operation=="*") 
     {Zahl=Zahl*wert.doubleValue();} 
          else if (Operation=="/") 
       {Zahl=Zahl/wert.doubleValue();} 
     Operation=s; 
     t1.setText(s.valueOf(Zahl)); 
     if (wert_str=="0") {t1.setText("geteilt durch 0");} 
     }   }//try 
   catch (ArithmeticException e) 
   { 
    t1.setText("Error:" + e );ziffer(""); 
       } 
   catch (Throwable e) 
   { 
    t1.setText("Fehler:" + e );ziffer(""); 
   } 
  }//Ende verkn 
/** 
* main 
**/ 
public static void main(String[]args) 
{ 
Taschenrechner meinFenster=new Taschenrechner(); 
}//End
```


----------



## Heiko (10. Nov 2004)

Teste doch einfach, ehe du teilst ob der Wert durch den geteilt werden soll 0 ist.


----------



## Student (10. Nov 2004)

Heiko hat gesagt.:
			
		

> Teste doch einfach, ehe du teilst ob der Wert durch den geteilt werden soll 0 ist.


würd ich auch sagen. einfach eine if-abfrage zwischenschieben.

wenn der wert != 0, dann kannst du dividieren, ansonsten lässt du eine fehlermeldung aufpoppen oder so .. :idea:


----------



## Sky (10. Nov 2004)

Der Fehler liegt in Zeile 292.

Ein Stringvergleich (bezogen auf den Inhalt) muss mit 'equals' durchgeführt werden:


```
if (wert_str=="0")
```

erstetzen durch


```
if (wert_str.equals( "0"))
```


----------



## Heiko (10. Nov 2004)

Anonymous hat gesagt.:
			
		

> alter halt deine fresse du fisch  :autsch:
> 
> die antwort is
> 
> ...



Schonmal was von Umgangsformen gehört? Als Gast sollte man sich erst recht daran halten. :noe:

Boardregeln

Im Übrigen hat Sky80 recht.


----------



## dotlens (10. Nov 2004)

hui! langer text!!

du hättest einen button Array erstellen können und dann in einer for schleife die locations setzen und hinzufügen und so weiter...

zu deinem prob:
würde die eingabe in einen String speichern, dann
kannst du fragen ob ein "/" vorkommt mit:

```
indexOf();
```
wenn -1 die antwort ist kannst du weiterfahren (kein "/" vorhanden)
sonst fragst du noch ob nach dem "/" nur eine 0 steht.
das geht indem du einen subString erzeugst ab dem index, den du oben erhalten hast. dann verwandeltst du diesen in eine zahl:

```
int vergleich = Integer.parseInt(subString);
```
oder so
und vergleichst mit null:

```
if (vergleich == 0){abbruch;}
```

EDIT: hui da hab ich aber lange gebraucht!!! bin davon ausgegangen dass er ja nicht weiss wann er die null überprüfen muss, da er auch wissen muss wann er "geteilt durch" rechnet


----------



## :freak: (10. Nov 2004)

Heiko hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...


----------



## Skauuwix (10. Nov 2004)

wow,
gleich so viel hilfe. danke es hat gepasst.

jetz muss ich nurnoch die if umschreiben, weil ers nämlich auch bei '-' 0 macht

 :toll:


----------



## CelikBlek (10. Nov 2004)

Anonymous hat gesagt.:
			
		

> alter halt deine fresse du fisch  :autsch:
> 
> die antwort is
> 
> ...


was ist denn mit dir los? schlecht geschlafen?


----------



## Heiko (10. Nov 2004)

CelikBlek hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...



Nein, keine Umgangsformen würde ich sagen.


----------



## Skauuwix (10. Nov 2004)

ja, es funktioniert jetz komplett.
danke für die hilfe.

ich bastel noch bissl dran rum, vieleicht meld ich mich nochmal  :wink:


----------



## Heiko (10. Nov 2004)

Skauuwix hat gesagt.:
			
		

> ja, es funktioniert jetz komplett.
> danke für die hilfe.
> 
> ich bastel noch bissl dran rum, vieleicht meld ich mich nochmal  :wink:



Kannst du immer machen, wenn wir helfen können tun wir das auch.

Viel Spaß noch beim programmieren.


----------



## Student (10. Nov 2004)

CelikBlek hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...



:arrow: *don't feed the troll*


----------



## CelikBlek (10. Nov 2004)

hast recht


----------



## stev.glasow (10. Nov 2004)

Bevor der Spinner noch kollabieren sperr ich das lieber mal.


----------

