Taschenrechner

NetzUnity und Informatik-forum wurden zusammengelegt. Eine entsprechende Ankündigung wird demnächst noch folgen. Für 2025 ist hier einiges geplant! Bei Fragen bitte per DM an Maximilian Rupp wenden.
  • Möchte noch eine case Anweisung eingeben, dass falls rechenop ein leerzeichen sein sollte oder gar nichts eingegeben wird, das auch Falsche Eingabe erscheint.
    Finde im ganzen Internets nichts dazu, wie ich so einen Case erstelle.

  • warum? bei mir funktionierts:

    liefert bei mir "Leerzeichen".

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • Dein Problem haengt gar nicht mit dem case Statement zusammen. Die Methode next() von der Klasse scanner ist so dokumentiert:

    Zitat


    public String next()

    Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext() returned true.

    http://java.sun.com/javase/6/docs/…nner.html#next()

    Wie findet man sowas heraus? Zum Beispiel, indem man an verschiedenen Stellen des Programms print statements setzt und so schaut , wo das programm haengenbleibt. Und man kann auch mit den print statements herausfinden, welchen wert die variablen im code haben.

    Wenn Du dann festgestellt hast, welche Methode fuer den Fehler verantwortlich ist, schaust Du erstmal in der API nach, ob Du sie auch wirklich so funktioniert wie Du es angenommen hast.


    Um Dein Problem zu loesen, gibt es nun verschiedene Moeglichkeiten: Du koenntest z.B. die Eingaben zeilenweise einlesen, mit (Scanner.nextLine(), Scanner.hasNextLine()). Oder Du aenderst den delemiter vom Scanner auf etwas anderes, mit useDelemiter; ein Zeilenumbruch bietet sich hier an:

    Code
    s.useDelimiter(Pattern.compile("\n"));

    in diesem fall musst du aber vor

    Code
    rechenop = s.next().charAt(0);

    Noch abfragen, ob es auch wirklich eine Eingabe gegeben hat. Denn wenn es kein Input gibt, kann das natuerlich nicht gutgehen.

  • Check ich nicht, bei mir kommt NICHTS. Er tut einfach so als ob er noch auf eine Eingabe wartet.

    Tja dann hängt dein Programm wahrscheinlich bei .next() ... deswegen wie a9bejo sagte Print Statements machen.

    Aber wenn du es für EProg brauchst (danach sieht es sehr aus) musst du die Eingabe sowieso noch umschreiben.

    lg Stefan

  • Warum muss er die Eingabe noch umschreiben???
    Muss man in Eprog die Abgaben so implementieren dass die Testläufe mit Textdateien abgehandelt werden??

    lg max

    Die Zeit war schön, nur ans is bled...
    ... dass mit der Zeit die Zeit vergeht :omg:

  • Naja wegen folgendem:

    1) Es darf keine Ausgabe außer dem Ergebniss oder halt FALSCHE EINGABE kommen, also kein: Bitte geben sie Zahl a ein
    2) Er darf nicht darauf vertrauen das die EProg Spezifikationen so nett zu ihm sind und a) 3 Werte haben die eingelesen werden b) 2 Zahlen am Anfang haben

    Die Textfiles simmulieren nur die Eingabe, aber ohne Textfiles kannst du ihm das END OF FILE so schlecht simulieren (bzw. steht ehh in der Angabe ... unter Windows gehts mit STRG Z, unter Linux hab ichs nicht rausgefunden wie es geht bis jetzt)

    lg Stefan

  • Die Textfiles simmulieren nur die Eingabe, aber ohne Textfiles kannst du ihm das END OF FILE so schlecht simulieren (bzw. steht ehh in der Angabe ... unter Windows gehts mit STRG Z, unter Linux hab ichs nicht rausgefunden wie es geht bis jetzt)

    Unter Unices ist es STRG+D.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • das problem bei deinem code und den testinputs die dir das eprog testscript geben wird (siehe Horrendus' post) ist soweit ich das beurteilen kann, dass du kein exception handling hast. du musst damit rechnen, dass du einen programmfehler bekommst wenn du eine falsche eingabe tätigst.

    es gibt mehrere möglichkeiten für das problem. die eleganteste (meiner meinung nach) lösung wäre ein try/catch block mit dem du die jeweiligen fehler der bei einer eingabe entstehen könnte (eigentlich sinds eh nur falsche eingabe und keine eingabe) auffängst. das haben wir aber noch nicht gelernt. (im internet kannst du die syntax dafür aber sicher recherchieren).

    du könntest dir aber auch die folien von der heutigen vo nochmal durchsehen, da haben wir das eh gemacht :)
    guck mal auf folie 167-170 / 251 in den aktuellen folien http://tosca.inflab.tuwien.ac.at/eprip/downloads.dohttp://tosca.inflab.tuwien.ac.at/eprip/downloads.do

    hier wird halt jedesmal mit hasNext() überprüft ob die eingabe quasi "stimmt", und dann erst weitergemacht.

  • hallo,
    kann mir bitte jemand sagen wie ich überprüfe ob ein operator eingegeben wurde?! das problem wurde oben schon genannt, aber bin irgendwie auf keine lösung gekommen.
    wenn ich die beiden zahlen eingebe, aber keinen operator, und danach enter drücke wartet er auf eine eingabe, aber eigentlich sollte eine fehlermeldung kommen. ich hoffe jemand kann mir helfen.

    erikk

  • Drücke einfach strg+c (bzw. strg+z bei Linux/Mac) in der DOS-BOx. Damit teilst du dem Programm mit, dass die Eingabe beendet wurde.

    *räusper* EOF ist Strg+Z unter Windows, in Unices Strg+D; mir ist nicht bekannt, dass Strg+Z in Unices irgendwas ähnliches macht.

    Strg+C dient üblicherweise dazu, irgendeine Aktion abzubrechen, unter Unices schickst du dabei ein Signal an den entsprechenden Prozess, wie das unter Windows funktioniert, weiß ich nicht. Auf jeden Fall ist das nicht dafür gedacht, dem Programm mitzuteilen, dass die Eingabe zu Ende ist.

  • da kommt bei mir immer eine fehlermeldung, und zwar:

    Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:838)
    at java.util.Scanner.next(Scanner.java:1347)
    at Calculator.main(Calculator.java:41)

  • Hi Leute!
    Vielleicht kann mir da jemand helfen.
    Warum erkennt die Methode reader.hasNext() nicht wenn meine Eingabe beendet ist?

    Wenn ich zb:
    "+ 1" eingebe, terminiert das Programm nicht sonder wartet auf weitere Eingaben... warum nur?


    if (reader.hasNext())
    {
    operator = reader.next().charAt(0); //Einlesen des Operators

    }
    else
    {
    error=true;

    }

    if (reader.hasNext() && error==false) //Einlesen der ersten komplexen Zahl!
    {
    z1.a = reader.nextInt();
    }
    else
    {
    error=true;
    }

    if (reader.hasNext() && error==false)
    {
    z1.b = reader.nextInt();
    }
    else
    {
    error=true;
    z1.a=0; // wenn Eingabe zB - 2 ist soll ja 0 + 0 ausgegeben werden,
    z1.b=0; // deshalb werden für diesen Fall Immaginär und Realteil = 0 gesetzt!
    }

    Die Zeit war schön, nur ans is bled...
    ... dass mit der Zeit die Zeit vergeht :omg:

  • hab den fehler schon gefunden....
    hasnext erkennt EOF wenn ma STRG + D drückt...
    Nach 1 Stunde suche hab ich den Fehler endlich gefunden ;)
    Dafür merk ichs mir jetz!

    Die Zeit war schön, nur ans is bled...
    ... dass mit der Zeit die Zeit vergeht :omg:

Jetzt mitmachen!

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