# Nur Zahlen bei Eingabe zulassen?



## BigmasterDenis (8. Dez 2004)

Hallo Leute!

Hab folgendes Problem: ich möchte nur Zahlen über die Tastatur einlesen und zwar *nur *Zahlen. Hider der Code:


```
import java.io.*;


public class Calc 
{

	public static void main(String[] args) 
									
	{
	
		String ZahlS;
		char operator;
		
	
		try
		{
			
		BufferedReader eingabe = new BufferedReader ( new InputStreamReader (System.in));
						
		ZahlS = eingabe.readLine();
		
		Double.parseDouble(ZahlS);
		
		System.out.print(ZahlS);
	
		}
		
		
		catch (IOException e)
		
		{
			System.out.println("Keine Buchstaben!");
		}
		
	
	
	
	}
}
```


Sobald ich etwas anderes als eine Zahl eingebe kommt ne Fehlermeldung (hier unter Eingabe von "d")


"Exception in thread "main" java.lang.NumberFormatException: For input string: "d"
	at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
	at java.lang.Double.parseDouble(Unknown Source)
	at Calc.main(Calc.java:22)"

Ich habs ja versucht mit (IOException e) abzufangen... funzt aber nicht. 

Kann mir jemand ein Tip geben? Vorzugsweise einen bei dem das Programm nach dem Fehler weiterlaufen kann. (Im Sinne von "Buchstaben sind unzulässig! Bitte nur Zahlen eingeben")


thanx4help!


----------



## Wildcard (8. Dez 2004)

> Ich habs ja versucht mit (IOException e) abzufangen... funzt aber nicht.


wie auch? wenn ne 


> NumberFormatException


geworfen wird?
Also: 2ter Catch-Block und ne while schleife drumrum.


----------



## Dreezard (8. Dez 2004)

Wie du an der ausgeworfenen Exception siehst handelt es sich nicht um eine IOException sondern um eine NumberFormatException. Also musst du um die zu catchen:  catch(NumberFormatException e) {}  verwenden


----------



## Wildcard (8. Dez 2004)

@Dreezard
war schon wieder schneller  8)


----------



## Dreezard (8. Dez 2004)

@Wildcart
dafür nummt meine Antwort nicht so viel Platz weg  :wink:


----------



## BigmasterDenis (8. Dez 2004)

Mit (NumberFormatException e) habe ich es auch schon probiert. Geht aber aber auch nicht. Eclipse unterstreicht 
	
	
	
	





```
eingabe.readLine();
```
und der Compiler sagt:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Unhandled exception type IOException

	at Calc.main(Calc.java:20)

Wie soll denn das mit Schleife gehen? Wozu brauche ich die?


----------



## Wildcard (8. Dez 2004)

Wer lesen kann ist klar im vorteil  :wink: 


> Also: 2ter Catch-Block und ne while schleife drumrum.


der alte Catch Block bleibt natürlich!
Ne while schleife machst du drum weil du ja so lange weiter einlesen willst,
bis der benutzer eine gültige zahl eingibt.


----------



## Dreezard (8. Dez 2004)

du darfst catch(IOexception exc) nicht wegnehmen! Also:

```
import java.io.*;

public class Calc
{
   public static void main(String[] args) {

      String ZahlS;
      char operator;

      try
      {
         
      BufferedReader eingabe = new BufferedReader ( new InputStreamReader (System.in));
                  
      ZahlS = eingabe.readLine();
      
      Double.parseDouble(ZahlS);
      
      System.out.print(ZahlS);
   
      }
      
      
      catch (IOException ioe)
      
      {
         System.out.println("Fehler beim lesen der Eingabe");
      }
      
      catch (NumberFormatException nfe)
      
      {
         System.out.println("Keine Buchstaben!");
      }
   
   
   
   }
}
```


----------



## Dreezard (8. Dez 2004)

@Wildcard
*grummel*


----------



## Wildcard (8. Dez 2004)

@Dreezard
ich war wieder schneller, UND hab weniger platz gebraucht  :bae:


----------



## Dreezard (8. Dez 2004)

@Wildcart
Aber dafür hab ich mir ja noch die mühe gemacht Code zu posten, was mehr eindruck schindet :lol: 
(Ich bin vieleicht nicht der schnellste im Antworten-posten, aber ich weiß mich zu wehren  :lol:  :wink:  )


----------



## Wildcard (8. Dez 2004)

```
public class Offtopic
{
    public Offtopic()
    {
        try
        {
            String username = "Wildcart";
            username = username.substring(0,username.length()-2);
            username = username + "d";
        }
        catch(DummRummlaberException dRE)
        {
            callGarbageCollector();
        }
    }
}
```

beenden wir das besser  :wink:


----------



## Dreezard (8. Dez 2004)

hast recht WildcarD  :lol: 

Aber ne frage hätte ich nochmal. Wie würdest du die while-schleife schreiben?
oder anders gefragt, wie kann man überprüfen, ob etwas ne Exception rauswirft
(Ja ich bin auch noch anfänger *g*)
Man könnte es auch eleganter lösen indem man ne methode schreibt die durch die exception wieder aufgerufen wird.[/u]


----------



## Wildcard (8. Dez 2004)

```
import java.io.*; 

public class Calc 
{ 
   public static void main(String[] args) { 

      String ZahlS; 
      char operator; 
      boolean userIsStillStupidAsHell = true;
      while(userIsStillStupidAsHell)
      {
           try 
          { 
          
          BufferedReader eingabe = new BufferedReader ( new InputStreamReader (System.in)); 
                  
          ZahlS = eingabe.readLine(); 
      
          Double.parseDouble(ZahlS); 
      
          System.out.print(ZahlS); 
          userIsStillStupidAsHell = false;
        
          } 
          
      
          catch (IOException ioe) 
      
          { 
             System.out.println("Fehler beim lesen der Eingabe"); 
          } 
      
          catch (NumberFormatException nfe) 
      
          { 
             System.out.println("Keine Buchstaben!"); 
          } 
    
       }
    
   } 
}
```

noch einfacher:


```
import java.io.*; 

public class Calc 
{ 
   public static void main(String[] args) { 

      String ZahlS; 
      char operator; 

      try 
      { 
          
      BufferedReader eingabe = new BufferedReader ( new InputStreamReader (System.in)); 
                  
      ZahlS = eingabe.readLine(); 
      
      Double.parseDouble(ZahlS); 
      
      System.out.print(ZahlS); 
    
      } 
      
      
      catch (IOException ioe) 
      
      { 
         System.out.println("Fehler beim lesen der Eingabe"); 
      } 
      
      catch (NumberFormatException nfe) 
      
      { 
         System.out.println("Keine Buchstaben!"); 
         main(null);
      }
   } 
}
```


----------



## Dreezard (8. Dez 2004)

... Sorry is schon spät *rausred*  :autsch:


----------



## Wildcard (8. Dez 2004)




----------



## Guest (9. Dez 2004)

Hey danke Jungs! Hab heute erst gesehen, was ihr da fabriziert habt... 

Das wird mir sicher weiterhelfen!

Ich habe mich noch nicht sehr ausführlich mit Exceptions beschäftigt. Daher die Frage: Was sagt das "e", "ioe" bzw das "nfe" am Ende von (IOException ...)? Und kennt jemand eine Übersicht über alle Exception-Arten?


----------



## bygones (9. Dez 2004)

das "am Ende" ist der Name der Variable....
eine Übersicht bietet wie immer die API !!


----------



## Guest (9. Dez 2004)

wozu brauche ich denn diese Variable?


----------



## bygones (9. Dez 2004)

es ist eine Objektvariable, d.h. ud kannst methoden des objekts nutzen...
z.b. e.printStackTrace() oder so....


----------



## Guest (9. Dez 2004)

also ist diese Variable frei wählbar und ich kann damit weiter arbeiten, wenn ich möchte? (ja ich weiß ich sollte ins Javabuch gucken   )


----------



## Dreezard (9. Dez 2004)

schlichtweg: ja


----------



## bygones (9. Dez 2004)

beides mal ein definitives JA !!!


----------



## Guest (9. Dez 2004)

gut zu wissen...

thanx@all


----------

