1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Abbruch des Scanners bei fehlender Eingabe

  • Keeper
  • 11. November 2009 um 14:53
  • Unerledigt
  • Keeper
    2
    Keeper
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 11. November 2009 um 14:53
    • #1

    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

  • Mythos
    2
    Mythos
    Mitglied
    Punkte
    40
    Beiträge
    7
    • 11. November 2009 um 15:30
    • #2
    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.

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 11. November 2009 um 15:34
    • #3

    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;

  • Keeper
    2
    Keeper
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 11. November 2009 um 15:41
    • #4
    Zitat von Mythos
    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.

    Zitat von sutupud

    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

  • Mythos
    2
    Mythos
    Mitglied
    Punkte
    40
    Beiträge
    7
    • 11. November 2009 um 15:53
    • #5

    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)

  • sutupud
    13
    sutupud
    Mitglied
    Reaktionen
    59
    Punkte
    1.659
    Beiträge
    320
    • 11. November 2009 um 16:05
    • #6
    Zitat von Mythos

    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)

  • Mythos
    2
    Mythos
    Mitglied
    Punkte
    40
    Beiträge
    7
    • 11. November 2009 um 16:09
    • #7

    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)

  • Keeper
    2
    Keeper
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 11. November 2009 um 16:32
    • #8
    Zitat von Mythos

    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

  • Mythos
    2
    Mythos
    Mitglied
    Punkte
    40
    Beiträge
    7
    • 11. November 2009 um 16:41
    • #9
    Code
    String buffer = new String [3];
    Scanner reader = new Scanner(System.in);
    int counter = 0;
    while (reader.hasNext() ||  i <=2) {
      buffer[i] = reader.next();
      i++,
     
    }
    if (count !=3   )
     System.out.println("Falsche Eingabe");
    else {
     
     .....
     
     switch (zeichen)
     case '*': berechnen...
     .
     .
     case '+': berechnen...
     default: System.out.println("Falsche Eingabe");
    }
    Alles anzeigen



    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)

  • vinkulja6
    1
    vinkulja6
    Mitglied
    Punkte
    10
    Beiträge
    2
    • 11. November 2009 um 17:01
    • #10
    Zitat von Mythos


    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)

  • Keeper
    2
    Keeper
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 11. November 2009 um 17:32
    • #11
    Zitat von vinkulja6

    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

  • vinkulja6
    1
    vinkulja6
    Mitglied
    Punkte
    10
    Beiträge
    2
    • 11. November 2009 um 17:40
    • #12
    Zitat von Keeper

    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!

  • Keeper
    2
    Keeper
    Mitglied
    Punkte
    30
    Beiträge
    5
    • 11. November 2009 um 20:55
    • #13

    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

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 12. November 2009 um 08:09
    • #14

    Ja das hat sutupud eh geschrieben.

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung