Buchstabe oder Zahl (do while)



  • Hallo!

    Mal ne Frage an euch. Wie kann ich überprüfen, ob ich ne Zahl oder einen Buchstaben eingegeben habe. Wenn's ein Buchstabe ist, dann soll die Schleife nochma durchlaufen werden. Also mit einer do while Scheife

    do { ...

    } while (zahl != ...);

    Danke
    Timi



  • Hi

    Die Klasse Chracter bieter dir Möglichekeit herauszufinden ob es eine Zahl ist oder nicht.

    Chracter.isDigit(char c);

    Die Methode wird dir bestimmt weiter helfen.
    Bye



  • Danke. Das ist mit Sicherheit das, was ich brauch, nur weiss ich nicht, wie ich's richtig anwende. Das Programm bricht immer noch ab, wenn ich einen Buchstaben eintippe. Ich poste mal mein Prog.

    Danke schonmal
    Timi

    import java.io.*;
    
    public class fak {
    	public static void main(String[] args)throws IOException {
    		int zahl1=0;
    
    		System.out.println("\nFakultät");
        	InputStreamReader datenstrom = new InputStreamReader(System.in);
        	BufferedReader dateneingabe = new BufferedReader(datenstrom);
        	/*try {  	System.out.print("\nBitte Zahl eingeben: "); 
        			zahl1 = Integer.parseInt(dateneingabe.readLine()); 
        		}
        	catch ( NumberFormatException e) 
        		{	System.err.println(e); System.exit (0);	} */
    
        	do {	System.out.print("\nBitte Zahl eingeben: "); 
        		 	zahl1 = Integer.parseInt(dateneingabe.readLine()); 
        	} while (Character.isDigit(zahl1));
    
        	System.out.println(zahl1 + "! ist: " +  fakultät(zahl1));
    	}
    
    	static int fakultät (int n) {
    		if (n==0)	return 1;
    		else return n*fakultät(n-1);
    
    	}
    
    }
    


  • Hi
    Also du hast folgendes Problem, es kann ja auch seind as du eine Zahl eingibbst die mehr als eine Ziffer beinhaltet z.B: 22

    In diesem Fall kannst du Character.isDigit nicht verwenden.

    Ich habe mal deinen Code einbischen abgeändert.

    public static void main(String[] args) throws IOException {
    		int zahl1 = 0;
    		boolean status = true;
    		String eingabe = "";
    		System.out.println("\nFakultät");
    		InputStreamReader datenstrom = new InputStreamReader(System.in);
    		BufferedReader dateneingabe = new BufferedReader(datenstrom);
    
    		do {
    			System.out.print("\nBitte Zahl eingeben: ");
    			eingabe = dateneingabe.readLine();
    			if (eingabe == null)
    				status = false;
    			else{
    				if (eingabe.equals("")){
    					status = false;
    				}
    				else{
    					//Ab hier wird es interessant
    					//Es kann ja auch sein das man eine Zahl eingibt die mehr als eine Stelle hat.
    					try{
    						zahl1 = Integer.parseInt(eingabe);
    						status = true;
    					}catch (NumberFormatException ex) {
    						System.out.print("\nBitte geben Sie eine Zahl ein!");
    						status = false;
    					}
    				}
    			}
    
    		} while (!status);
    
    		System.out.println(zahl1 + "! ist: " + fakultät(zahl1));
    	}
    

    Versuch es mal damit.
    Also bei mir hat es geklappt.

    Bye



  • Geht auch mit weniger Hilfsvariablen und ifs, da die Fakultät einer negativen Zahl nicht berechnet werden kann.

    public static void main(String[] args) throws IOException { 
    	        String eingabe = ""; 
    	        System.out.println("\nFakultät"); 
    	        InputStreamReader datenstrom = new InputStreamReader(System.in); 
    	        BufferedReader dateneingabe = new BufferedReader(datenstrom); 
    
    	        int zahl1 = -1; 
    	        do { 
    	            System.out.print("\nBitte Zahl eingeben: "); 
    	            eingabe = dateneingabe.readLine(); 
                    try{ 
                        zahl1 = Integer.parseInt(eingabe); 
                    }catch (NumberFormatException ex) {
                    	//Zahl bleibt -1 und Integer.parseInt(null) -> NumberFormatException 
                    }
                    if(zahl1<0) {
                    	System.out.print("\n"+eingabe+" ist keine gültige Zahl!");
                    }
    
    	        } while (zahl1<0); 
    
    	        try {
    	        	System.out.println(zahl1 + "! ist: " + fakultät(zahl1));
    	        } catch (StackOverflowError e) {
    	        	System.out.println("Zahl war zu groß! :(");
    	        }
    	    } 
    
    	   static long fakultät (int n) { 
    	        if (n==0)    return 1; 
    	        else return n*fakultät(n-1); 
    
    	    }
    


  • Vielen Dank.

    Da aber einiges neu ist bzw. Funktionen die ich noch nicht kenne, versuche ich mal anhand von Kommentaren dein Prog. zu versehen. Ansonsten musst mich mal koorigieren.

    public static void main(String[] args) throws IOException {
            int zahl1 = 0;
            boolean status = true;
    
            String eingabe = "";
            System.out.println("\nFakultaet");
            InputStreamReader datenstrom = new InputStreamReader(System.in);
            BufferedReader dateneingabe = new BufferedReader(datenstrom);
    
            do {
                System.out.print("\nBitte Zahl eingeben: ");
                eingabe = dateneingabe.readLine();
                if (eingabe == null)   //Prüfe ob überhaupt eine Eingabe erfolgt ist
                    status = false;    //wenn nein, Schleife nochmal
                else{
                    if (eingabe.equals("")){  // -> musst mit mal erklären
                        status = false;       
                    }
                    else{
                        //Ab hier wird es interessant
                        //Es kann ja auch sein das man eine Zahl eingibt die mehr als eine Stelle hat.
                        try{
                            zahl1 = Integer.parseInt(eingabe);  //String nach Int prasen
                            status = true; 
                        }catch (NumberFormatException ex) {
                            System.out.print("\nBitte geben Sie eine Zahl ein!");
                            status = false;
                        }
                    }
                }
    
            } while (!status);
    

    Prüfst du damit -> eingabe.equals("") <- ob jetzt ein String oder eine Zahl eingeben wurde???

    Danke
    Timi



  • Hi

    Also bei Vergleichen von Objekten wird immer die Methode equals Verwendet.
    In Java werden Zeichenketten (Strings) als Objekte angesehen.

    Die Methode equals schaut in diesem Beispiel nach ob die Eingabe leer ist, also ob eine leere Eingabe stattgefunden hat.

    Bye



  • if (eingabe.equals("")){ ...

    Kannst du weg lassen, da

    Integer.parseInt("")

    auch ne NumberFormatException wirft.


Anmelden zum Antworten