Division durch null abfangen :freak:

  • Themenstarter Themenstarter Skauuwix
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
S

Skauuwix

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


Code:
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 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:
 
Der Fehler liegt in Zeile 292.

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

Code:
 if (wert_str=="0")

erstetzen durch

Code:
 if (wert_str.equals( "0"))
 
Anonymous hat gesagt.:
alter halt deine fresse du fisch :autsch:

die antwort is
Code:
if (wert_str.equals("0")) {t1.setText("geteilt durch 0");}
du Spast!

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

Boardregeln

Im Übrigen hat Sky80 recht.
 
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:
Code:
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:
Code:
int vergleich = Integer.parseInt(subString);
oder so
und vergleichst mit null:
Code:
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
 
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:
 
Anonymous hat gesagt.:
alter halt deine fresse du fisch :autsch:

die antwort is
Code:
if (wert_str.equals("0")) {t1.setText("geteilt durch 0");}
du Spast!
was ist denn mit dir los? schlecht geschlafen?
 
ja, es funktioniert jetz komplett.
danke für die hilfe.

ich bastel noch bissl dran rum, vieleicht meld ich mich nochmal :wink:
 
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.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben