Input/Output Int Eingabe auf Zahl überprüfen

Tobias1996

Mitglied
Hallo zusammen,
Ich habe folgendes Problem, ich habe vor mit, als Vorbereitung aufs Studium selbstständig das programmieren beizubringen (oder zumindest schon einmal anzulernen) und habe mir im Zuge dessen ein kleines Programm geschrieben, welches die Nullstellen einer quadratischen Funktion bestimmen soll.
Das Programm an sich läuft auch, nur stürzt es ab, wenn eine der eingegebenen Werte ein Buchstabe ist, da dieser Fall nicht definiert ist. Ich habe auch bereits google gefragt, aber die Lösungen funktionieren in meinem Code nicht, da sie meistens davon ausgehen, dass man die Variable als String behandelt, ich behandele sie allerdings als int.

Hier mal mein Code zum besseren Verständnis (bin auch für Verbesserungsvorschläge jederzeit offen)

Java:
Import java.util.Scanner;

public class BerechnungMitExternerEingabe {

    public static void main(String[] args) {
        Scanner scan1 = new Scanner(System.in);
        
        int a;
        int b;
        int c;
        
        System.out.println("Sofern ihre quadratische Funktion die Form : ax^2+bx+c hat, folgen sie den Anweisungen");
        System.out.println("Bitte geben sie a ein");
        a = scan1.nextInt();        
        System.out.println(a + " wurde eingegeben!");
        
        System.out.println("Bitte geben sie b ein");
        b = scan1.nextInt();
        System.out.println(b + " wurde eingegeben");
        
        System.out.println("Bitte geben sie c ein");
        c = scan1.nextInt();
        System.out.println(c + " wurde eingegeben");
        
        scan1.close();

        int b2 = b*b;        // b^2 
        int root = b2 - 4* a * c;        //Unter der Wurzel
        
        double root2 = Math.sqrt(root);        //Die gesamte Wurzel
        
        double nullstelle1 = (-b + root2) / 2 * a;
        double nullstelle2 = (-b - root2) / 2 * a;
        double nullstelle3 = (-b/2*a);
        
        if (root < 0) {
            System.out.println("Die Funktion besitzt keine Nullstellen!");
        }
        
        else if (root == 0) {
            System.out.println("Die Funktion besitzt nur eine Nullstelle und diese ist");
            System.out.println(nullstelle3);
        }
        
        else {
                System.out.println("Die errechneten Nullstellen sind:");
                System.out.println(nullstelle1);
                System.out.println(nullstelle2);
    }

    }
}
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Einfach gesagt: wenn du die Eingabe als int behandelst, geht es nicht.


In einem int kann nur eine Zahl stehen, danach prüfen, ob eine Zahl drin steht, geht logischerweise nicht ;)
Die Variante, das als String einzulesen, ist richtig, nur so kannst du das selbst prüfen. Den String musst du dann noch parsen, dann hast du den int, den du brauchst
 

Tobias1996

Mitglied
Hey mrBrown,
Danke für die schnelle Antwort.
Würde es dir etwas ausmachen, mir zu erklären, wie genau das mit dem parsen funktioniert? Ich hatte diesen Befehl schonmal gelesen, aber bei mir hat er nicht funktioniert, und danach hat er logischerweise beim scan1.nextInt Befehl rumgemeckert.

Also ich deklariere a, b und c als Strings, wandele sie dann mit dem parse Befehl um und prüfe dann per if else schleife, ob eine Zahl eingegeben wurde? Dann müsste ich ja auch die ganzen scan Befehle umschreiben in etwas, was für Strings funktioniert, oder?
 

Tarrew

Top Contributor
Die Überprüfung mit if-else kannst du dir sparen.

Falls du versuchst ein int-Wert aus einem String zu parsen welcher keine Zahl enthält, wird eine Exception geworfen. Damit weißt du dann auch, dass keine Zahl eingegeben wurde.
Java:
Scanner sc = new Scanner(System.in);

System.out.print("Zahl eingeben: ");
String a = sc.nextLine();
try {
    int b = Integer.parseInt(a);
    System.out.println("Eingegebene Zahl: " + b);
} catch (NumberFormatException e) {
    System.out.println("Es wurde keine Zahl eingegeben");
}



Alternativ kannst du auch mit einem regulären Ausdruck prüfen, ob die Eingabe eine Zahl enthält und das Parsen somit 'sicher' ist. Dann kannst du dir den try-catch Block auch sparen:
Java:
Scanner sc = new Scanner(System.in);

System.out.print("Zahl eingeben: ");
String a = sc.nextLine();

if(a.matches("-?\\d+")){
    int b = Integer.parseInt(a);
    System.out.println("Eingebene Zahl: "+b);
}else{
    System.out.println("Es wurde keine Zahl eingegeben");
}
 
X

Xyz1

Gast
Ich habe es mit dem String und dem try catch Befehl jetzt hinbekommen
Das ändert nix daran, das Scanner für das einlesen einer Zeile schlicht falsch (gewählt) ist.

Habe das schnell selber geschrieben:
Java:
        BufferedReader inr = new BufferedReader(new InputStreamReader(System.in));
        for (;;) {
            System.out.println("ax^2+bx+c => a b c in einer Zeile eingeben:");
            String line = inr.readLine();
            if (line == null) {
                break;
            }
            String[] split = line.split(" ");
            if (split.length != 3) {
                continue;
            }
            try {
                double a = Double.parseDouble(split[0]),
                       b = Double.parseDouble(split[1]) / a,
                       c = Double.parseDouble(split[2]) / a;
                double d = Math.sqrt(b * b / 4 - c);
                double re1 = -b / 2 + d;
                double re2 = -b / 2 - d;
                System.out.println("Ergebnis 1: " + re1);
                System.out.println("Ergebnis 2: " + re2);
            } catch (NumberFormatException e) {
            }
        }
 
X

Xyz1

Gast
Also vielleicht steh ich auf dem Schlauch, aber das wäre doch die Mitternachtsformel, oder?:
pq-formel.jpg

(Nein, das ist nicht meine Handschrift, die ist viel schöner!)

Jetzt verstehe ich deinen Schritt: b*b - 4* a * c NICHT! Bitte erklären.
 

Tobias1996

Mitglied
Mitternachtsformel:

PQ-Formel:

Was du meinst, ist die PQ Formel, es gibt mehr als eine Methode, eine quadratische Gleichung zu lösen.

EDIT:
Da hier ja sowieso noch ein paar Leute unterwegs sind, hätte ich noch eine kurze Frage.

Ich würde mein Programm gerne als runnable jar Datei auf dem Desktop speichern, das klappt allerdings aus irgendeinem Grund nicht.

Meine Schritte:
Eclipse > File > Export > BerechnungMitStrings.jar (meine Datei) > Java(runnable JAR file) > Export Destination (Ordner auf dem Desktop) > Finish.

Diese Datei (Ich habe sie mal Nullstellenrechner genannt) lässt sich nun weder mit einem Doppelklick ausführen, noch per java -jar Nullstellenrechner.jar auf der Kommandozeile.

Kann mir jemand sagen, wo mein Fehler liegt? Laut Google fehlen mir möglicherweise irgendwelche Ressourcen, aber ich habe hier doch nichts weiter verwendet, als nur die eine Datei, oder nicht?

Liebe Grüße
 
Zuletzt bearbeitet:

Tobias1996

Mitglied
Darf ich fragen, was das mit dem aktuellen Thema zu tun hat?

Anyway, das kommt mir gerade wie eine Achterbahnfahrt vor, ich habe jetzt eine Methode gefunden, wie es funktioniert.
Nachdem ich die jar Datei aus eclipse exportiert habe, lasse ich mir in dem entsprechenden Ordner die Dateiendungen anzeigen und erstelle eine Datei namens RUN.bat, in diese schreibe ich dann java -jar Nullstellenrechner.jar

Durch Doppelklick auf die .bat Datei startet nun mein Programm.

JETZT habe ich allerdings das Problem, dass das Programm zwar wunderbar funktioniert, nur leider schließt es sich sofort nach der letzten eingabe (also die Eingabe von c) wieder, das macht das "auslesen" der Nullstellen natürlich schwer.

Weiß irgendjemand, wie ich das noch beheben kann?
Das sollte jetzt aber die letzte Frage sein, entschuldigt für die Unannehmlichkeiten :D
 

mrBrown

Super-Moderator
Mitarbeiter
Klar, darfst du das. Du schriebst eingangs, die Absicht zu haben, Informatik zu studieren. Damit du nicht desillusioniert bist, sage ich gleich von vornherein, dass eine 2 in Mathe in der Schule dann eine 5 (oder 6) im Studium ist. :)
Mag bei dir so gewesen sein, das ist auch sehr schade für dich, hast du mal drüber nachgedacht, dann das Studium sein zu lassen?
Aber das hat weder was mit pq- noch mit Mitternachtsformel was zu tun, welche beide nichts mit der Frage zu tun haben...
 

Tobias1996

Mitglied
@JCODA:
Danke, ich hatte es zwischendurch nochmal mit einer Änderung des Codes versucht, um einen weiteren leeren Scanner aufzurufen mit einer Ausgabe Nachricht "geben sie eine beliebige Taste ein", aber das scheint die elegantere und auch schnellere Lösung zu sein.
Vielen Dank ! :)

@DerWissende
Ich habe vorher bereits etwas anderes studiert, wo ebenfalls ein bisschen was an Unimathematik vorkommt, ich bin mir also durchaus bewusst, dass der Großteil des Studiums Mathematik sein wird, und zwar eine andere Mathematik als in der Schule.

Ich danke dir zwar für die Info, allerdings fällt es mir schwer, Tipps über Mathematik von jemandem wahrzunehmen, der nicht den Unterschied zwischen der pq-Formel und der abc-Formel kennt :p
Danke trotzdem
 
X

Xyz1

Gast
Aber das hat weder was mit pq- noch mit Mitternachtsformel was zu tun, welche beide nichts mit der Frage zu tun haben
Doch - das Nichterklärenkönnen, Nichtherleitenkönnen dieser einfachen, grundlegenden Formeln, hat sehr wohl etwas mit diesem Thema zu tun.

Und btw. - du kennst meine Noten nicht, ich wäre etwas vorsichtig mit dem, was ich sage/schreibe, an deiner Stelle. :)
 

mrBrown

Super-Moderator
Mitarbeiter
Doch - das Nichterklärenkönnen, Nichtherleitenkönnen dieser einfachen, grundlegenden Formeln, hat sehr wohl etwas mit diesem Thema zu tun.
Das war dann wohl ein Punkt für dich - also ein negativer, er hatte die Formel schließlich richtig, und du falsch...
Und btw. - du kennst meine Noten nicht, ich wäre etwas vorsichtig mit dem, was ich sage/schreibe, an deiner Stelle. :)
Na du hast doch geschrieben, das die Noten so abrutschen, und sonst sprichst du doch immer von dir, woher soll man dann wissen, das es jetzt anders ist?
 
X

Xyz1

Gast
Eh, meine Formel war nicht falsch?! Richtigerer vielleicht.

Außerdem war mit meinem Beitrag bereits alles beantwortet, es stand nur noch die Frage im Raum, ob er es studieren sollte- und da ein klares, realistisches Nein.

Ich meine wenn er schon fragt, darf man auch ehrlich darauf antworten. "Seine" pq- oder Mitternachts- oder sonstige Formel hat nichts mit den Grundvoraussetzungen zu tun, die er an sich müsste.
 

mrBrown

Super-Moderator
Mitarbeiter
Eh, meine Formel war nicht falsch?! Richtigerer vielleicht.
Zumindest kannst du mitternachts- und pq-Formel nicht unterscheiden...okay, wenn man wie du per se alles als richtig definierst, was du sagst, dann hast natürlich du Recht.
Außerdem war mit meinem Beitrag bereits alles beantwortet,

Nö, von dir kam dein übliches Geschwafel, welches mal wieder völliger Unsinn ist.

es stand nur noch die Frage im Raum, ob er es studieren sollte- und da ein klares, realistisches Nein.

Ich meine wenn er schon fragt, darf man auch ehrlich darauf antworten. "Seine" pq- oder Mitternachts- oder sonstige Formel hat nichts mit den Grundvoraussetzungen zu tun, die er an sich müsste.

Klares, realistisches Ja.
Immerhin kennt er im Gegensatz zu die Mitternachts und pq-Formel.
 

Tarrew

Top Contributor
Macht keinen Sinn mit 'DerWissende' zu diskutieren. Der hat einfach immer Recht. Das Schlimmste daran ist, der trollt nicht mal (wie ich am Anfang immer vermutet habe), der meint das echt alles ernst.
 

Meniskusschaden

Top Contributor
Eh, meine Formel war nicht falsch?! Richtigerer vielleicht.
Genau. Wenn man z.B. auf die Frage nach dem Satz des Pythagoras mit einer korrekten binomischen Formel antwortet, sollte man dafür natürlich auch die volle Punktzahl bekommen. Hauptsache die Aussage stimmt - muss ja nicht zur Frage passen:
Lehrer: "Wie lautet die Mitternachtsformel?"
Schüler: "Das weiß ich nicht."
Lehrer: "Das ist korrekt. Volle Punktzahl!";)
es stand nur noch die Frage im Raum, ob er es studieren sollte
:confused:Wo hat er das denn gefragt? Kann die Stelle gerade nicht finden.
Youtube Video verlinken ist keine Erklärung.
Es ist auch kein Beweis dafür, etwas nicht verstanden zu haben. Warum hätte er dir das denn mit eigenen Worten erläutern sollen? Er konnte vorher doch gar nicht wissen, dass du mit den Videos nicht klar kommst?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G überprüfen,ob bei der Eingabe es sich um einer Zahl handelt? Java Basics - Anfänger-Themen 2
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
F Abfrage ob Eingabe eine Zahl ist Java Basics - Anfänger-Themen 3
I Höchste Zahl berechnen die eine Eingabe ohne Rest teilt und eine Primzahl ist Java Basics - Anfänger-Themen 2
M Java Zahl Eingabe Java Basics - Anfänger-Themen 2
F Eingabe der int Zahl eingrenzen Java Basics - Anfänger-Themen 6
K Eingabe von Zahlen und anschliessend höchste Zahl ausgegeben Java Basics - Anfänger-Themen 11
Torschti Eingabe von Dezimalzahlen (bis zu zwei Kommastellen) Java Basics - Anfänger-Themen 11
T User input in Verbindung mit ChronoUnit anpassen und falls falsche Eingabe getätigtwird Java Basics - Anfänger-Themen 7
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
G Programm läuft durch, ohne Eingabe aus dem Chat abzuwarten Java Basics - Anfänger-Themen 4
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
M Dialogbox sofort neustarten, falls aktuelle Eingabe falsch Java Basics - Anfänger-Themen 11
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
A Bei VierGewinnt Eingabe per Buchstabe (a,b,c...) Java Basics - Anfänger-Themen 2
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
L Dauerhaftes Speichern einer Eingabe bei einer ArrayList Java Basics - Anfänger-Themen 26
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
J Mein Programm läuft bei der ersten Eingabe nicht mehr weiter, woran liegt das? Java Basics - Anfänger-Themen 6
M Eingabe limit Java Basics - Anfänger-Themen 8
brypa Programm mit Eingabe Java Basics - Anfänger-Themen 129
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
D falsche eingabe erkennen Java Basics - Anfänger-Themen 2
H Eingabe tätigen bevor Graphics g Fenster öffnet Java Basics - Anfänger-Themen 5
H For-Schleife bis Index von Eingabe laufen lassen Java Basics - Anfänger-Themen 24
Hamudi Bachir 2D Array eingabe vom Benutzer Java Basics - Anfänger-Themen 31
S Warum erscheint bei mir "Hallo Welt" und nicht die aktuelle Eingabe? Java Basics - Anfänger-Themen 16
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
B Array bei jeder Eingabe um eins erweitern Java Basics - Anfänger-Themen 3
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
chocobear26 Interface JOptionPane - Dialog_Fenster zeigt immer vorherige Eingabe an. Java Basics - Anfänger-Themen 4
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
M JTextField nur Zahleneingaben zulassen, eingabe sperren Java Basics - Anfänger-Themen 24
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
N Eingabe erkennen, ob groß oder kleingeschrieben worden ist Java Basics - Anfänger-Themen 22
N Fehlerausgabe bei falscher Eingabe der Users Java Basics - Anfänger-Themen 3
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
N Eingabe Kommazahlen über Scanner Java Basics - Anfänger-Themen 2
O Mehrfache Scanner-Eingabe durch Komma getrennt Java Basics - Anfänger-Themen 6
M String array durch Eingabe begrenzen Java Basics - Anfänger-Themen 7
iman Eingabe von Benutzer Filter machen. Java Basics - Anfänger-Themen 7
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
D Eingabe einscannen, ohne vorher einen Datentypen anzugeben? Java Basics - Anfänger-Themen 1
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
H Eingabe Java Basics - Anfänger-Themen 7
F Bedingung für Eingabe Java Basics - Anfänger-Themen 2
K Durch eine Text eingabe etwas Ausführen Java Basics - Anfänger-Themen 5
Dimax Erste Schritte String Eingabe Prüfen Java Basics - Anfänger-Themen 11
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
B Türme von Hanoi mit einer beliebigen aber gültigen Eingabe lösen Java Basics - Anfänger-Themen 5
D While Schleife bei Bedarf durch Eingabe stoppen Java Basics - Anfänger-Themen 15
J Eingabe Einschränken Java Basics - Anfänger-Themen 1
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
D Array via Eingabe befüllen Java Basics - Anfänger-Themen 6
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
S Konsolen eingabe Java Basics - Anfänger-Themen 17
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
S Eingabe in anderer Klasse verwenden Java Basics - Anfänger-Themen 3
T Input/Output Falsche Eingabe ausgeben Java Basics - Anfänger-Themen 3
R Ratespiel mit Return und einer Eingabe Java Basics - Anfänger-Themen 1
K Eingabe in Array speichern und Ausgeben Java Basics - Anfänger-Themen 9
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
S Eingabe auf Richtigkeit und Reihenfolg überprüfen Java Basics - Anfänger-Themen 3
R Java CMD Eingabe verbergen Java Basics - Anfänger-Themen 4
L Eingabe überprüfen Java Basics - Anfänger-Themen 7
M Eingabe des Benutzers Verwenden Java Basics - Anfänger-Themen 9
S Method mit Eingabe abrufen Java Basics - Anfänger-Themen 1
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
M Erste Schritte primzahlen ermitteln, nur zahlen als eingabe erlauben Java Basics - Anfänger-Themen 34
K Überprüfen ob Eingabe ein Float ist Java Basics - Anfänger-Themen 4
G Warum funktioniert das Programm für negative Eingabe nicht? Java Basics - Anfänger-Themen 3
O Erste Schritte Eingabe anweisungen eliminieren Java Basics - Anfänger-Themen 3
G Objekt Instanziierung von Eingabe abhängig machen Java Basics - Anfänger-Themen 5
E Wie Passwort-Eingabe (ohne Echo!) über Konsole ? Java Basics - Anfänger-Themen 4
B Interface JTextField Eingabe als String verwenden Java Basics - Anfänger-Themen 3
H Alternative Eingabe Java Basics - Anfänger-Themen 3
L Bei falscher Eingabe soll NaN zurückgegeben werden, Rückgabetyp jedoch double Java Basics - Anfänger-Themen 3
J Methoden Eingabe Methode nur Buchstaben Java Basics - Anfänger-Themen 4
F Die Teilersumme einer Eingabe berechnen Java Basics - Anfänger-Themen 11
H Leere Eingabe in einem array Java Basics - Anfänger-Themen 11
K Input/Output Nullstring als Eingabe Java Basics - Anfänger-Themen 4
M Eingabe im Terminal nicht möglich Java Basics - Anfänger-Themen 20
D Anzahl von Zahlen bei eingabe begrenzen Java Basics - Anfänger-Themen 37
T Input/Output Double und String als Eingabe einlesen Java Basics - Anfänger-Themen 9
N Error bei eingabe eines Punktes Java Basics - Anfänger-Themen 1
M Messandwendung nach Zeit und eigener Eingabe Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben