# Kleines Problem... NaN, Infinity?



## sebastianrg (23. Mrz 2009)

Hi,

Ich habe im Rausch meiner Langeweile angefangen ein Programm zu schreiben, dass Quantitative Elementaranalyse und Molmassenbestimmung ausführt, allerdings ist die Ausgabe mehr als fragwürdig.(Bekomme als Ergebniss der QE immer Infinity und NaN)
Die Rechnung stimmt ganz sicher, ich weiß nur nicht, wo ich einen Fehler eingebaut haben soll.

Wahrscheinlich ist es die Überprüfung, welche Masse kleiner ist.
Vielleicht findet ihr ja den Fehler und es tut mir Leid, dass die Edit Felder nicht bessere Namen haben.;(

Fehlerabfragen habe ich noch keine drin, aber damit konnte ich sowieso nocht nichts machen, da der Fehler damit wohl eher nicht abgefangen wird^^

Hier jetzt der code:
[highlight=Java]
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
 // Quantitatvie Elementaranalyse und Molmassenbestimmung von Organischen Stoffen:


        String C =  jEditorPane2.getText();
          double c2 = Double.valueOf(C).doubleValue();
          double mc = c2*(12/44); //Masse von C

        String H = jEditorPane3.getText();
        double h2 = Double.valueOf(H).doubleValue();
        double mh = h2*(1/9);//Masse von H

        String gesamt = jEditorPane1.getText();
        double gesamts = Double.valueOf(gesamt).doubleValue();
        double mo = gesamts-(mh+mc);

        //Nächster Schritt:
        double mmc = mc/12;
        double mmo = mo/16;

        //Initialiserung:
double erg1 = 0;
double erg2 = 0;
double erg3 = 0;

//Hier ist der Fehler nehme ich an:
       if (mmc < mmo && mmc < mh){
       erg1= mmc/mmc;
       erg2= mh/mmc;
       erg3= mmo/mmc;
            }
       else if(mh < mmc && mh < mmo){
       erg1= mmc/mh;
       erg2= mh/mh;
       erg3= mmo/mh;
       }
       else if(mmo < mh && mmo < mmc){
       erg1= mmc/mmo;
       erg2= mh/mmo;
       erg3= mmo/mmo;
       }
System.out.println(erg1);
System.out.println(erg2);
System.out.println(erg3);

        String HPAs = jEditorPane6.getText();
        double HPA = Double.valueOf(HPAs).doubleValue();

        String Temperatur = jEditorPane5.getText();
        double Temp1 = Double.valueOf(Temperatur).doubleValue();
        double temp = Temp1+273.15;

        String Liter = jEditorPane7.getText();
         double l = Double.valueOf(Liter).doubleValue();

         String stoffg = jEditorPane4.getText();
         double stoff = Double.valueOf(stoffg).doubleValue();

         double gaskon = 83.144;

         double n = (HPA*l)/(gaskon*temp);

         double Molmasse = stoff/n;
         double c12 = 12;
         double o16 = 16;
         double n1 = (c12*erg1)+(erg2)+(o16*erg3);

         double Ende = Molmasse/n1;
         String End = String.valueOf(Ende);
         jEditorPane8.setText(End);

    }                                        

[/highlight]

Schonmal Danke im Vorraus.:toll:
PS: Ich benutze Netbeans und Eclipse eher selten(eig. nur in der Schule)

edit:
Sorry wollte das ganze eigentlich unter Anfänger posten, denn sowas passt eigentlich da mehr^^
Falls der Drang besteht es zu verschieben, tut euch keinen Zwang an.


----------



## Ebenius (23. Mrz 2009)

sebastianrg hat gesagt.:


> Sorry wollte das ganze eigentlich unter Anfänger posten, denn sowas passt eigentlich da mehr^^
> Falls der Drang besteht es zu verschieben, tut euch keinen Zwang an.


Done.


----------



## Der Müde Joe (23. Mrz 2009)

das Problem liegt hier:
double mc = c2*(12/44);

und allen ähnlichen Stellen.

Java interpretiert Operationen mit ints..also (12 / 44) = 0
mach:
(12d/44) und du hast ein double


----------



## Marco13 (23. Mrz 2009)

(12/44)
wird zu 0 (ganzzahlige Berechnung). Erkennt man auch, wenn man mal ein Paar Debug-Ausgaben reinbaut. Abhilfe:
(12.0/44.0)


----------



## hdi (23. Mrz 2009)

Schmeiss doch mal den Debugger in deiner IDE an, dann kannste ja Step by Step
nachsehen, an welcher Stelle verdächtige Werte aufrtreten, und wo es letztendlich
zu dem NaN kommt.

edit: zu langsam, und scheinbar auch zu faul sich den Code mal anzusehen xD


----------



## ARadauer (23. Mrz 2009)

*(12/44); .... usw allgemein wenn du durch int dividierst kommt int raus


  System.out.println(12/44);
  System.out.println(12/44f);


----------



## Der Müde Joe (23. Mrz 2009)

hihi...drei Antworten drei verschiedene Lösungen... (und alle io)

(12d/44)
(12.0/44.0) 
(12/44f)


----------



## sebastianrg (23. Mrz 2009)

Danke Funktioniert!
Ich bin aber auch ein Depp, da zeigte mir Netbeans doch soagar an, dass das Problematisch ist^^
Und zwar als ich das gemacht habe:
[highlight=Java]
 double c12 = 12;
         double o16 = 16;
         double n1 = (c12*erg1)+(erg2)+(o16*erg3);
[/highlight]


----------



## 0x7F800000 (23. Mrz 2009)

viel wichtiger als diese 0/0 fehler wäre hier die berechnung von diesem ganzen jEditoPane-Kram zu trennen, das kann sich doch kein Mensch anguggen  und es ist um EINIGES ätzender zu debuggen :noe:


----------



## sebastianrg (23. Mrz 2009)

jo das wäre sicher der nächste Schritt, alles in Funktionen packen.
Danach werd ich mal dafür sorgen, dass man die Formel eingeben kann und, sie dann einem die Werte ausgibt^^


----------

