Abbruch des Scanners bei fehlender Eingabe

  • Hallo!
    Bin gerade im 1.Semester:wave:. Hab das Prgoramm für die erste Übungsrunde (hab den Taschenrechner bekommen) gemacht. Es Funktioniert auch alles , bis auf das der Scanner immer darauf wartet das die komplette Eingabe(also Zahl1 Zahl2 Rechenzeichen) gemacht wird.
    Es soll aber bei fehlen einer Eingabe(also nur 2 1 statt 2 1 +) die Fehlermeldung "Falsche Eingabe" ausgegeben werden.
    Hab schon einiges Versucht und auch im Internet gesucht, hab aber nichts passendes gefunden.:wein:

    Hoffe es hat jemand eine Lösung dafür.


    Hier mal mein Programm:


    //Zum Testen zuerst Zahl1 dann Abstand dann Zahl2, Abstand und am Ende das Rechenzeichen eingeben!!!

    import java.util.Scanner;

    public class Calculator {
    public static void main(String[]args){
    int Zahl1;
    int Zahl2;
    char Zeichen; //Rechenzeichen
    int Ergebnis=0;
    boolean bol; //Wird dieser False wird dieFehlermeldung "FALSCHE EINGABE" ausgegeben.
    Zahl1=0;
    Zahl2=0;

    bol=true; //ein false bei dieser Variable führt zu Fehlermeldung


    Scanner reader=new Scanner(System.in);

    if(reader.hasNextInt()) {
    bol=true;
    Zahl1=reader.nextInt();
    }else{
    bol=false;
    }
    if(reader.hasNextInt()) {
    bol=true;
    Zahl2=reader.nextInt();

    }else{
    bol=false;
    }


    Zeichen=reader.next().charAt(0); Hier muss wohl angesetzt werden um das Problem zu beheben!


    if((Zeichen=='+')||(Zeichen=='-')||(Zeichen=='*')||(Zeichen=='/')) {
    }else{ bol=false;
    }

    if(Zeichen=='+'){
    Ergebnis=Zahl1+Zahl2;
    }
    if(Zeichen=='-'){
    Ergebnis=Zahl1-Zahl2;
    }
    if(Zeichen=='*'){
    Ergebnis=Zahl1*Zahl2;
    }
    if(Zeichen=='/'){
    if((Zahl2>0)||(Zahl2<0)){
    Ergebnis=Zahl1/Zahl2;
    }else{

    bol=false;
    }
    }

    if(bol==true){

    System.out.println(Ergebnis);


    }else{ System.out.println("FALSCHE EINGABE");
    }
    }
    }


    Mfg Michael

  • Code
    if (reader.hasNext())
      Zeichen=reader.next().charAt(0); 
    else
      System.out.println("Falsche Eingabe");



    würde ja reichen wenn du schaust ob noch ein Element vorhanden ist.

  • um die eingabe zu beenden, musst du strg+d (strg+z unter windows) eingeben!
    Scanner.next() reagiert nämlich nicht auf whitespace oder zeilenumbrüche.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    &#128513;&#128514;&#128515;&#128516;&#128517;&#128518;&#128519;&#128520;&#128521;&#128522;&#128523;&#128524;&#128525;&#128526;&#128527;&#128528;&#128530;&#128531;&#128532;&#128534;&#128536;&#128538;&#128540;&#128542;&#128544;&#128545;&#128546;&#128547;&#128549;&#128552;&#128553;&#128554;&#128555;&#128557;&#128560;&#128561;&#128562;&#128563;&#128565;&#128566;&#128567;

  • Code
    if (reader.hasNext())
      Zeichen=reader.next().charAt(0); 
    else
      System.out.println("Falsche Eingabe");



    würde ja reichen wenn du schaust ob noch ein Element vorhanden ist.

    Hab ich schon so versucht, aber der Wartet immer noch auf eine Eingabe.

    um die eingabe zu beenden, musst du strg+d (strg+z unter windows) eingeben!
    Scanner.next() reagiert nämlich nicht auf whitespace oder zeilenumbrüche.

    Das Problem ist aber, dass bei der Abgabe keiner Strg d drückt, weil das ja automatisiert kontrolliert wird.
    Hab es schon mal abgegeben und 1.08 von 1.2 Punkten bekommen. Es fehlt halt nur noch der Fall einer fehlenden Eingabe.

    Ich hoffe nicht, dass ich mich in eine "Einbahn" programmiert habe und es für meinen Fall keine Lösung gibt.:(

    Trotzdem Danke für die Beteiligung.

    MfG Michael

  • Dh das du den Fall keine Eingabe abfangen willst? oder meinst du eine Leereingabe?
    Der Scanner liest ja alles bis du Enter drückst. Dh du hast nur eine Eingabe wenn du mit Enter beendest.
    So wie du es oben beschrieben hast machst 1 2 Enter.

    2 Mal editiert, zuletzt von Mythos (11. November 2009 um 16:04)

  • Dh das du den Fall keine Eingabe abfangen willst? oder meinst du eine Leereingabe?
    Der Scanner liest ja alles bis du Enter drückst.
    So wie du es oben beschrieben hast machst 1 2 Enter.


    nein, eben nicht bis enter, sondern bis "End Of File".
    in der konsole sendet man EOF eben mit strg+d oder strg+z.
    beim automatisieren testen kommen die eingaben aus einer datei und nicht von der konsole.
    selbst kann man das auch mit z.b.
    java Calculator < inFile
    machen.
    in diesem beispiel kommt es bei einer fehlenden eingabe zu einer exception, weil reader.next().charAt(0) natürlich nicht existiert, wenn keine eingabe erfolgt ist.

    "All through my life I've had this strange unaccountable feeling that something was going on in the world, something big, even sinister, and no one would tell me what it was."
    "No," said the old man, "that's just perfectly normal paranoia. Everyone in the Universe has that."

    &#128513;&#128514;&#128515;&#128516;&#128517;&#128518;&#128519;&#128520;&#128521;&#128522;&#128523;&#128524;&#128525;&#128526;&#128527;&#128528;&#128530;&#128531;&#128532;&#128534;&#128536;&#128538;&#128540;&#128542;&#128544;&#128545;&#128546;&#128547;&#128549;&#128552;&#128553;&#128554;&#128555;&#128557;&#128560;&#128561;&#128562;&#128563;&#128565;&#128566;&#128567;

    Einmal editiert, zuletzt von sutupud (11. November 2009 um 16:08)

  • Mir ist nur nicht klar was er für einen Fall hier abfangen will.
    Hast du maximal 3 Elemente bei der Eingabe?
    wenn ja frag doch einfach die länge des scanners ab und wenn != 3 oder >3 -> Falsche eingabe

    Einmal editiert, zuletzt von Mythos (11. November 2009 um 16:23)

  • Mir ist nur nicht klar was er für einen Fall hier abfangen will.
    Hast du maximal 3 Elemente bei der Eingabe?
    wenn ja frag doch einfach die länge des scanners ab und wenn != 3 oder >3 -> Falsche eingabe

    Ja ,es sollen maximal 3 Elemente sein. Wie frag ich die Länge des Scanners ab?

    MfG Michael



  • so ungefähr vlt, bin mir leider nicht sicher ob scanner sowas size oder length anbietet. Java is schon etwas länger her

    3 Mal editiert, zuletzt von Mythos (11. November 2009 um 16:46)


  • so ungefähr vlt, bin mir leider nicht sicher ob scanner sowas size oder length anbietet. Java is schon etwas länger her

    length gibt es schon bei java, nur wird es meiner meinung nach nicht bei dem Beispiel nötig sein, mann kann es auch anders lösen siehe unten.

    @ keeper

    versuch mal nach jeder falschen eingabe ein break einzubauen.

    das boolean lass mal weg.

    um auf das problem mit fehlenden operator zurück zukommen shaut das dann ungefähr so aus

    Code
    if(reader.hasNext())
      operator = reader.next();
      else
      {
        System.out.println("FALSCHE EINGABE");
        break;
      }

    nothing is true, everything is permitted!

    2 Mal editiert, zuletzt von vinkulja6 (11. November 2009 um 17:06)

  • length gibt es schon bei java, nur wird es meiner meinung nach nicht bei dem Beispiel nötig sein, mann kann es auch anders lösen siehe unten.

    @ keeper

    versuch mal nach jeder falschen eingabe ein break einzubauen.

    das boolean lass mal weg.

    um auf das problem mit fehlenden operator zurück zukommen shaut das dann ungefähr so aus

    Code
    if(reader.hasNext())
      operator = reader.next();
      else
      {
        System.out.println("FALSCHE EINGABE");
        break;
      }

    Wenn ich es mit break mache kommt immer die Fehlermeldung: break outside switsch or loop
    Ich glaube das break geht nur in einer while Schleife.
    trotzdem Danke

    MfG Micahel

  • Wenn ich es mit break mache kommt immer die Fehlermeldung: break outside switsch or loop
    Ich glaube das break geht nur in einer while Schleife.
    trotzdem Danke

    MfG Micahel

    nicht böse sein, aber das programm stell ich dir nicht rein, is ja klar das du es mit ner while schleife machen musst, wie bleibt dir überlassen. noch ein tipp, ich hab den operator als string eingelesen, mit char bin ich auf den selben gleis wie du gewesen.

    wenn du es dennoch mit char hinbekommst, wäre nett wenn du mir den code morgen per PM schickst, habe meinen bereits abgegeben und volle punkte :D:D
    viel glück noch, hab mich gestern/heute bis 4 uhr früh damit geplagt

    mfg
    beks

    nothing is true, everything is permitted!

  • So Leute, jetzt hat es funktioniert!
    Der Code war die ganze Zeit richtig, nur muss man diese Testdatein die bei den Beispielen dabei sind einlesen! Dachte die sind nur nettes Beiwerk...

    Also danke für eure Hilfe, hab ein paar Sachen gelernt.
    Man sieht sich ja vielleicht :wave:
    MfG Michael

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!