Reihenfolgenproblem

  • Themenstarter Themenstarter GreenThunder
  • Beginndatum Beginndatum
G

GreenThunder

Hallo,

mein Aufgabe heute ist es eine Methode zu schreiben, die vom Nutzer die Eingabe einer ganzen Zahl fordert. Auf folgende Fehleingaben soll eine Fehlermeldung folgen:
- eingegebene Zahl nicht im Wertebereich (WB)
- Eingabe einer leeren Zeichenkette

Grundsätzlich funktioniert das auch, doch wenn ich einmal aus der "Leere"-While-Schleife herausgekommen bin, komme ich nicht wieder rein.
D.h. gebe ich eine 23 ein, die außerhalb des WB (0-20) liegt bekomme ich die Aufforderung:

Bitte geben Sie eine ganze Zahl ein!: 23
Die eingegebene Zahl liegt ausserhalb des Wertebereiches 0 <= k <= 20!
Bitte geben Sie eine ganze Zahl ein!:

Gebe nun nichts ein, so erscheint die selbe Fehlermeldung, er arbeitet also wieder nur in der "WB"-While-Schleife.

Bitte geben Sie eine ganze Zahl ein!:
Die eingegebene Zahl liegt ausserhalb des Wertebereiches 0 <= k <= 20!
Bitte geben Sie eine ganze Zahl ein!:

Kann mir jemand einen Rat geben?

PHP:
import java.io.*;             

public class AufgabeZwei
{
 
 static int eingabe(int min, int max) throws IOException           
  {
  BufferedReader din = new BufferedReader(                         
                       new InputStreamReader(System.in));
  int k; String s;
  
  System.out.print("Bitte geben Sie eine ganze Zahl ein!: ");            
  s = String.valueOf(din.readLine());
  
  while(s.equals("")==true)
     {
     System.out.println("Sie haben keine Zeichen eingegeben!");
     System.out.print("Bitte geben Sie eine ganze Zahl ein!: ");            
     s = String.valueOf(din.readLine());	                    
     } 

  k = Integer.parseInt(s);	                                      
  while (k < min || k > max)
	 {
	 System.out.println("Die eingegebene Zahl liegt ausserhalb des Wertebereiches 0 <= k <= 20!");
	 System.out.print("Bitte geben Sie eine ganze Zahl ein!: ");            
	 s = String.valueOf(din.readLine());	                      
	 }
  
     
  return k;
  } 
  
  
 public static void main (String[] args) throws IOException
  {
  BufferedReader din = new BufferedReader(                 
                       new InputStreamReader(System.in));
			
   eingabe(0,20);
  }

}
 
Hallo,
wie wäre es wenn du die Benutzereingabe in einer Endlosschleife einliest.
Wenn kein Zeichen eingegeben wird lässt du die Schleife nochmal von
vorn durchlaufen und wenn der eingegebene Wert ausserhalb des
Wertebereichs liegt dasselbe. Zum Schluss springst du mit einem break
aus der Endlosschleife heraus und es sollte laufen...

Gruß

RedWing
 
Einiges sinnvoller sieht das hier aus:
Code:
import java.io.*;

public class AufgabeZwei {
    
    private static final String EINGABE = "Bitte geben Sie eine ganze Zahl ein! ('ende' fuer Programmende): ";
    private static final String ENDE = "ende";
    
    static int eingabe(int min, int max) throws IOException {
        BufferedReader din = new BufferedReader(
                new InputStreamReader(System.in));
        int k; String s;
        
        System.out.println(EINGABE);
        while ( true ) {
            s = String.valueOf(din.readLine());
            
            if(s.equals("")) {
                System.out.println("Sie haben keine Zeichen eingegeben!");
                continue;
            }
            
            try {
                k = Integer.parseInt(s);
                if (k < min || k > max){
                    System.out.println("Die eingegebene Zahl liegt ausserhalb des Wertebereiches 0 <= k <= 20!");
                    System.out.println(EINGABE);
                } else{
                    System.out.println("Ihre Eingabe lautete: " + k);
                    System.out.println(EINGABE);
                }
            } catch(Exception e) {
                if ( s.toLowerCase().equals(ENDE) )
                    System.exit(0);
                
                System.out.println("Sie haben keine ganze Zahl eingegeben.");
                System.out.println(EINGABE);
            }
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader din = new BufferedReader(
                new InputStreamReader(System.in));
        
        eingabe(0,20);
    }
}

Tom: Du darfst gerne weiter verbessern. ;)
 
Danke, das ist natürlich eine exquisite Lösung.
Allerdings weiß ich nicht, in wie weit diese meinem Praktikumsleiter zusagt, da du einiges verwendet hast, was wir eigentlich noch nicht kennen.
Ich werde mal sehen, was ich verwenden kann und ohne was ich eventuell auch auskomme. :)
Vielen Dank nochmal.
 
GreenThunder hat gesagt.:
Danke, das ist natürlich eine exquisite Lösung.
Allerdings weiß ich nicht, in wie weit diese meinem Praktikumsleiter zusagt, da du einiges verwendet hast, was wir eigentlich noch nicht kennen.

Hö? Was denn?

Ich werde mal sehen, was ich verwenden kann und ohne was ich eventuell auch auskomme. :)

Ansonsten bist Du halt ein Streber. ;)
 
Snape hat gesagt.:

Z.B. das mit dem "private static final String" hatten wir noch nicht, ist aber auch nicht notwendig zur Lösung des Problems, deswegen hab ich es rausgenommen.

Die try-catch-Anweisung ist für mich auch neu, aber im "Java Handbuch" gut beschrieben, also hab ich die dringelassen. Kann sie denke ich auch gut erklären. ;-)
 
>Z.B. das mit dem "private static final String" hatten wir noch nicht, ist aber auch nicht notwendig zur Lösung des Problems, deswegen hab ich es rausgenommen.

Ist auch keine große Java-Kunst.

>Die try-catch-Anweisung ist für mich auch neu, aber im "Java Handbuch" gut beschrieben, also hab ich die dringelassen. Kann sie denke ich auch gut erklären. ;-)

Das try-catch ist für Integer.parseInt notwendig, wie die API zeigt und die Compiler meckern, wenn es fehlt. ;)
 
Zurück