Nur Zahlen bei Eingabe zulassen?

Status
Nicht offen für weitere Antworten.

BigmasterDenis

Aktives Mitglied
Hallo Leute!

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

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!
 
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
 
Mit (NumberFormatException e) habe ich es auch schon probiert. Geht aber aber auch nicht. Eclipse unterstreicht
Code:
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?
 
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.
 
du darfst catch(IOexception exc) nicht wegnehmen! Also:
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 ioe)
      
      {
         System.out.println("Fehler beim lesen der Eingabe");
      }
      
      catch (NumberFormatException nfe)
      
      {
         System.out.println("Keine Buchstaben!");
      }
   
   
   
   }
}
 
@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: )
 
Code:
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:
 
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]
 
Code:
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:

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 ioe) 
      
      { 
         System.out.println("Fehler beim lesen der Eingabe"); 
      } 
      
      catch (NumberFormatException nfe) 
      
      { 
         System.out.println("Keine Buchstaben!"); 
         main(null);
      }
   } 
}
 
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?
 
es ist eine Objektvariable, d.h. ud kannst methoden des objekts nutzen...
z.b. e.printStackTrace() oder so....
 
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 😳 )
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben