# Double.NaN abfragen



## Mane123 (1. Nov 2009)

Hallo zusammen,

ich habe folgende Methode geschrieben:


```
public static double getDouble () {
		
		String anzeige = "Bitte geben Sie eine Double-Zahl ein";
		double value = 0;
		boolean ok = false;
		
		while (ok == false) {
			
			String eingabe = JOptionPane.showInputDialog(anzeige);
			
			if (eingabe == null) {
				
				value = Double.NaN;
				ok = true;
			}
			
			else {
				
				try {
					
					value = Integer.parseInt(eingabe);
					ok = true;
				}
				
				catch (NumberFormatException e) {
					anzeige = "Eingabefehler: " + e.getMessage ();
				}
			}
		}	
		return value;
			
	}
```


Falls auf Abbrechen geklickt wurde, dann wird value der Wert NaN zugewiesen.

Nun möchte ich in einem anderen package den wert von value üperprüfen.


```
//Quadrat eines Double-Wertes
	
	doubleWertQuadrat = MeineRechnungen.quadrat (doubleWertQuadrat);
	
	if (MeineRechnungen.doubleWert == Double.NaN){
		
		System.out.println ("Sie haben die Eingabe abgebrochen");
	}
	
	else
		System.out.println ("Das Quadrat von " + MeineRechnungen.doubleWert + " ist " + doubleWertQuadrat);

}
```

Wenn der Wert nun NaN ist, dann sollte doch eigentlich die Meldung "Sie haben die Eingabe abgebrochen" erscheinen. Tut sie aber nicht. Woran liegt das, wo ist hier der Fehler?

Viele Grüße


----------



## Illuvatar (1. Nov 2009)

Das liegt daran, dass [c]Double.NaN != Double.NaN[/c] definiert ist. Verwende stattdessen
[c]Double.isNaN(MeineRechnungen.doubleWert)[/c].


----------



## eRaaaa (1. Nov 2009)

nein, NaN kannst du SO nicht abfragen, es gilt NaN!=NaN


```
System.out.println(Double.NaN==Double.NaN);
System.out.println(Double.NaN!=Double.NaN);
```


hab mir das jetzt nicht genau angeschaut, aber du solltest dir was anderes übelregne als die zahl dann einfach auf NaN zu setzen!


----------



## Mane123 (1. Nov 2009)

Vielen Dank für die Antworten!

Warum ist denn Double.NaN != Double.NaN? Kann man sich das irgendwie herleiten?

Kann man da nicht sagen: Keine Nummer ist gleich Keine Nummer?

Ich weiß leider keine andere Möglichkeit, um einen Klick auf "abbrechen" abzufangen. Bzw. einen weiß ich noch:

eine weitere Parallelvariable vom Typ boolean, die dann ausgewertet wird, ob die Eingabe abgebrochen wurde:


```
ntWert = MeineRechnungen.quadrat (intWert);
		
		if (MeineRechnungen.abgebrochen == true)
			System.out.println ("Sie haben die Eingabe abgebrochen.");
```


----------



## eRaaaa (1. Nov 2009)

Mane123 hat gesagt.:


> Ich weiß leider keine andere Möglichkeit, um einen Klick auf "abbrechen" abzufangen.



eig. tust du das ja schon. du fragst ja ab, ob eingabe == null (null wird zurückgeliefert vom inputdialog wenn der benutzer auf abbrechen klickt) ist, das ist ja schon ok. ich versteh allerdings dann nicht, wieso du das nochmal abfragen willst.? also da scheint irgendwie alles doppeltgemoppelt zu sein? imo müsste das [c] System.out.println ("Sie haben die Eingabe abgebrochen");[/c] eher in der abfrage [c]eingabe == null[/c] folgen.


----------



## Mane123 (1. Nov 2009)

Hallo!

Ja, ich kann schon die Meldung System.out.println ("Sie haben die Eingabe abgebrochen"); in die abfrage eingabe == null integrieren, aber dann muss ich ja trotzem noch mal irgenwie prüfen, ob der Wert korrekt berechnet wurde, ich kann ja nicht einfach 

 System.out.println ("Das Quadrat von " + MeineRechnungen.doubleWert + " ist " + doubleWertQuadrat);

schreiben, dann würde ja in jedem Fall diese Zeile erscheinen, auch wenn auf Abbrechen geklickt wurde, da habe ich die Auswertung, ob auf Abbrechen geklickt wurde eben auch in die Main-Methode geschrieben.

Viele Grüße


----------



## Marco13 (1. Nov 2009)

Mane123 hat gesagt.:


> Warum ist denn Double.NaN != Double.NaN? Kann man sich das irgendwie herleiten?



Eine "Herleitung" steht zufällig hier: http://www.java-forum.org/plauderecke/22639-java-quiz-57.html#post572994


----------

