Variablen Abfangen von eingaben per java.util.Scanner und weiter Verarbeitung

Phoenyx

Neues Mitglied
Hallo,

ich möchte ein Programm schreiben welches mir verschiedene Consolen Eingaben abfängt und diese dann entsprechend verarbeitet.

(Bitte nicht auf den Aufbau achten, ich weis das ich vieles in eigene Klassen und Methoden auslagern sollte.)

Nun mein Problem:

Die ersten 3 Variablen werden per scanner richtig eingelesen und lassen sich weiter verarbeiten. Bei der Variable fmodel kommt aber keine Abfrage mehr und keine Verarbeitung. Was habe ich hier falsch gemacht?

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package brafrechnergrundlagen;

import java.util.*;

/**
 *
 * @author Martin
 */
public class Hund {
    public static void main(String[] args) {
        
        String name,fmodel;
        int gewicht;
        double prozent,ergebnis;
        try (Scanner scanner = new Scanner(System.in)) {
            // Einlesen des Namens von der Console und ablegen in
            // der Variable name
            System.out.println("\nBitte den Namen des Hundes ein:");
            name = scanner.nextLine();
            // Einlesen des Alters von der Console und ablegen in
            // der variable age
            System.out.println("\nBitte gib das Gewicht des Hundes ein:");
            gewicht = scanner.nextInt();
            System.out.println("Dein Hund heist also: "+name );
            System.out.println("und wiegt: " +gewicht+"kg");
            // Einlesen der Prozente die gefüttert werden soll
            // in die Variable prozent
            System.out.println("\nBitte gib an wieviel Prozent du füttern möchtest:\n");
            prozent = scanner.nextDouble();
            System.out.println("Du möchtest deinem Hund also " +prozent +"% vom Körpergewicht füttern.");
            // Auswahl des Fütterungsmodells
            System.out.println("Bitte entscheide dich für ein Fütterungsmodel.");
            System.out.println("Aktuell kannst du zwischen Prey und Swanie wählen.");
            fmodel = scanner.nextLine();
            switch (fmodel) {
                case "Prey":
                    System.out.println("Du hast dich für das Prey-Fütterungsmodel entschieden!");
                    break;
                case "Swanie":
                    System.out.println("Du hast dich für das Fütterungsmodel nach Swanie entschieden!");
                    break;
            }
            System.out.println("Das von dir angegebene Fütterungsmodel: " +fmodel +"ist noch nicht eingebaut");
            //Berechnen der Futtermenge
            ergebnis = ((double)gewicht) / 100 * prozent;
            System.out.println("Dies bedeutet dein Hund bekommt am Tag: " +ergebnis+"kg");
        }
    }
}
 

kaoZ

Top Contributor
Java:
  try (Scanner scanner = new Scanner(System.in)) {.....}

Das ist Syntaktisch nicht korrekt, das mal vorab

richtig wäre :
Java:
try{
scanner = new Scanner(System.in);

}

Zudem wäre es erstens Sinnvoll das ganze Objekt Orientiert und nicht Prozedural zu Programmieren , zum anderen , könnte es durchaus sein das hier irgendwo ein Wert eingegeben wird , der eben nicht erwartet wird und somit eine Exception geworfen wird, die du aber so nicht nachvollziehen kannst da du hier keinen Catch Block definierst.

Ich hab es jetzt nur überflogen aber versuch mal das ganze in etwa so umzustrukturieren
(hier ohne Multicatch, welchen ich dir jedoch definitiv empfehle)

Prozedural:
Java:
try{

...
}
catch(Exception){
...
}

oder halt gleich Objekt-Orientiert und du erstellst dir eine klasse , welche methoden bietet die für das einlesen der Informationen, das bearbeiten, und verarbeiten zuständig sind, und erstellst davon jeweils nur Instanzen ;)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Doch ist richtig. Ist ein try-resource-block: HIER

Ist aber erst seit Java7 möglich.

Sah auf den ersten blick Syntaktisch nicht richtig aus, das Feature hab ich bis dato allerdings auch noch nicht verwenden müssen/ verwendet.

Mein Fehler ;)

Ändert aber nichts daran , das wenn er schon einen Try Block verwendet, dieser nix bringt wenn er dann evtl. geworfene Exceptions nicht auch behandelt/fängt ^^
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Ah das bringt schon etwas, weil ja Scanner AutoCloseable implementiert und so den Stream nicht händisch schließen muss.
 

kaoZ

Top Contributor
Ah das bringt schon etwas, weil ja Scanner AutoCloseable implementiert und so den Stream nicht händisch schließen muss.

Für sowas nutze ich für meinen Teil eigentlich immer eine Utilityklasse, die dann den Stream im finally/catch Block schließt, aber mag sein , ich hab mich wie gesagt mit der try-with-resources variante noch nicht weiter auseinander gesetzt :)
 
Zuletzt bearbeitet:

Phoenyx

Neues Mitglied
Vielen Dank für die bisherigen Antworten.

Richtig ist das ich hier Java 8 verwendet habe.

Auch richtig ist das ich noch keinen CatchBlock für Exception Handling eingebaut habe.

Leider helfen mir die Antworten bis jetzt noch nicht richtig weiter.

1. Ich vermute das mit der Aussage von

Ich hab es jetzt nur überflogen aber versuch mal das ganze in etwa so umzustrukturieren
(hier ohne Multicatch, welchen ich dir jedoch definitiv empfehle)

gemeint ist entweder alles in eigene Methoden / Klassen zu packen oder jeden Scanner lauf nach der Eingabe zu schließen und einen neuen zu öffnen wenn eine weitere Eingabe erwartet wird.

2. Und auf jedenfall ein ExceptionHandling einbauen sollte.

Ich muss hierzu erwähnen ich bin eher der Praktisch lernende Mensch. Alles was ich kann habe ich mir durch unzählige Wiederholungen beigebracht. Ich habe zwar auch ettliche Bücher gekauft und versucht zu lesen aber muss ganz ehrlich zugeben, das nachbauen von Beispielen bringt mir 10 mal mehr.

Wenn mir also vielleicht jemand an der ersten Eingabe mal ein Beispiel machen kann wäre ich echt dankbar.

Gruß und Danke schon mal

So ich habe nun mal noch ein bisschen rum probiert. Nun bekomme ich wenigstens eine Exception auch wenn ich gerade nichts damit anfangen kann.

Hier erstmal die Exception:
Exception in thread "main" java.util.NoSuchElementException
Aktuell kannst du zwischen Prey und Swanie wählen.
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at brafrechnergrundlagen.Hund.main(Hund.java:45)
Java Result: 1

Was am Code habe ich folgendes geändert:

Wie man in Zeile 27 sehe kann versuche ich es jetzt ohne nextLine() sonder nun mit next das funktioniert wieder für den ersten Teil auch sehr gut, den zweiten Teil in Zeile 45 zu sehen habe ich in einen neuen try block ausgelagert, leider brachte das nicht den gewünschten Erfolg.

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package brafrechnergrundlagen;

import java.util.*;

/**
 *
 * @author Martin
 */
public class Hund {
    public static void main(String[] args) {
        
        String name;
        name = null;
        String fmodel;
        fmodel = null;
        int gewicht;
        double prozent,ergebnis;
        try (Scanner scanner = new Scanner(System.in)) {
            // Einlesen des Namens von der Console und ablegen in
            // der Variable name
            System.out.println("\nBitte den Namen des Hundes ein:");
            name = scanner.next();
            // Einlesen des Alters von der Console und ablegen in
            // der variable age
            System.out.println("\nBitte gib das Gewicht des Hundes ein:");
            gewicht = scanner.nextInt();
            System.out.println("Dein Hund heist also: "+name );
            System.out.println("und wiegt: " +gewicht+"kg");
            // Einlesen der Prozente die gefüttert werden soll
            // in die Variable prozent
            System.out.println("\nBitte gib an wieviel Prozent du füttern möchtest:\n");
            prozent = scanner.nextDouble();
            System.out.println("Du möchtest deinem Hund also " +prozent +"% vom Körpergewicht füttern.");
        }      

        // Auswahl des Fütterungsmodells
        try (Scanner scanner1 = new Scanner(System.in)) {
            System.out.println("Bitte entscheide dich für ein Fütterungsmodel.");
            System.out.println("Aktuell kannst du zwischen Prey und Swanie wählen.");
            fmodel = scanner1.next();
            switch (fmodel) {
                case "Prey":
                    System.out.println("Du hast dich für das Prey-Fütterungsmodel entschieden!");
                    break;
                case "Swanie":
                    System.out.println("Du hast dich für das Fütterungsmodel nach Swanie entschieden!");
                    break;
            }
            System.out.println("Das von dir angegebene Fütterungsmodel: " +fmodel +"ist noch nicht eingebaut");
            //Berechnen der Futtermenge
            ergebnis = ((double)gewicht) / 100 * prozent;
            System.out.println("Dies bedeutet dein Hund bekommt am Tag: " +ergebnis+"kg");
        }
    }
}
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Also ich kann dir sagen, warum das nicht funktioniert.

Du musst entweder dein try-with-resource-block über die ganze main Methode hängen oder du lässt sie weg. Wenn der erste Block fertig ist, wird der Scanner und der darunterliegende Stream (in dem Fall System.in) geschlossen. Dieser kann nach Schließung nicht mehr geöffnet werden außer bei der JVM neustart. In der Regel schließt man System.in nicht genau sowenig wie die anderen Standard Ausgaben (System.out, System.err).

Java:
import java.util.Scanner;

public class Hund {
  public static void main(String[] args) {
    String name = null;
    String fmodel = null;
    int gewicht;
    double prozent, ergebnis;
    try (Scanner scanner = new Scanner(System.in)) {
      System.out.println("\nBitte den Namen des Hundes ein:");
      name = scanner.next();
      System.out.println("\nBitte gib das Gewicht des Hundes ein:");
      gewicht = scanner.nextInt();
      System.out.println("Dein Hund heist also: " + name);
      System.out.println("und wiegt: " + gewicht + "kg");
      System.out.println("\nBitte gib an wieviel Prozent du füttern möchtest:\n");
      prozent = scanner.nextDouble();
      System.out.println("Du möchtest deinem Hund also " + prozent + "% vom Körpergewicht füttern.");
      System.out.println("Bitte entscheide dich für ein Fütterungsmodel.");
      System.out.println("Aktuell kannst du zwischen Prey und Swanie wählen.");
      fmodel = scanner.next();
      switch (fmodel) {
        case "Prey":
          System.out.println("Du hast dich für das Prey-Fütterungsmodel entschieden!");
        break;
        case "Swanie":
          System.out.println("Du hast dich für das Fütterungsmodel nach Swanie entschieden!");
        break;
      }
      System.out.println("Das von dir angegebene Fütterungsmodel: " + fmodel + "ist noch nicht eingebaut");
      // Berechnen der Futtermenge
      ergebnis = (double) gewicht / 100 * prozent;
      System.out.println("Dies bedeutet dein Hund bekommt am Tag: " + ergebnis + "kg");
    }
  }
}

PS: Man schreibt wirklich nur Kommentare wo welche nötig sind. Wenn eine Zeile drüber beschreibt: "Liest das Gewicht ein", dann braucht man keinen Kommentar mit "Das Gewicht wird in diese Variable eingelesen" ... . Weil der Code hier schon selbsterklärend ist und die Variable dementsprechend heißt!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dimax SizeLimitExceededException abfangen Java Basics - Anfänger-Themen 6
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
K falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
Kirby.exe Alle möglichen Error Möglichkeiten abfangen Java Basics - Anfänger-Themen 33
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
D Wie kann man eine solche Fehlermeldung abfangen Java Basics - Anfänger-Themen 4
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
L Erste Schritte IndexOutOfBounce abfangen? Java Basics - Anfänger-Themen 17
M GUI - Fehler abfangen beim Dividieren Java Basics - Anfänger-Themen 8
J Fehler abfangen mit einer Bedingung Java Basics - Anfänger-Themen 3
B Erste Schritte Abfangen eines Fehlers/Ausbrechen aus der Schleife Java Basics - Anfänger-Themen 12
W In einer Function<Double, Double> undefinierte Rechenoperationen abfangen? Java Basics - Anfänger-Themen 3
D Input/Output Runtime().exec fehler abfangen Java Basics - Anfänger-Themen 4
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
S java tastendrücke direkt abfangen und printen Java Basics - Anfänger-Themen 3
H Fehler im Konstruktor abfangen Java Basics - Anfänger-Themen 10
OnDemand Exception Abfangen Java Basics - Anfänger-Themen 5
T Division durch 0 abfangen mit Schleife Java Basics - Anfänger-Themen 4
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
H Wie kann ich STRG+V abfangen und ändern Java Basics - Anfänger-Themen 2
B Exception abfangen Java Basics - Anfänger-Themen 33
D [jni] loadLibrary Exception abfangen Java Basics - Anfänger-Themen 9
M Windows Aktionen abfangen Java Basics - Anfänger-Themen 3
W Tastatureingabe abfangen Java Basics - Anfänger-Themen 15
S Exception abfangen Java Basics - Anfänger-Themen 2
N Fehlerquelle leere ArrayList elegant abfangen Java Basics - Anfänger-Themen 3
J Standard Exceptions abfangen Java Basics - Anfänger-Themen 5
M Datentypen Fehler abfangen Java Basics - Anfänger-Themen 5
J Eclipse Console Ausgaben Abfangen Java Basics - Anfänger-Themen 2
sylo Warnings abfangen Java Basics - Anfänger-Themen 2
F Falscheingabe abfangen - Endlosschleife Java Basics - Anfänger-Themen 5
H MouseEvent abfangen Java Basics - Anfänger-Themen 9
A Exception Verständnisfrage: Exceptions während, einer Statischenzuweisung abfangen Java Basics - Anfänger-Themen 10
Spin Exception abfangen Java Basics - Anfänger-Themen 3
M Frage zum Abfangen ungültiger Werte Java Basics - Anfänger-Themen 9
I Fehlendes Argument in Main-Methode abfangen Java Basics - Anfänger-Themen 15
N Probleme beim abfangen von fehlern Java Basics - Anfänger-Themen 4
A FileNotFoundException abfangen? Java Basics - Anfänger-Themen 3
H Falsche Eingabe über try-catch abfangen Java Basics - Anfänger-Themen 2
Spin Abfangen von Fehlern Java Basics - Anfänger-Themen 9
M Exception abfangen? Java Basics - Anfänger-Themen 3
G Eine exception mit negativen zahlen abfangen ? Java Basics - Anfänger-Themen 11
I Dialog - "Ja" / "Nein" abfangen Java Basics - Anfänger-Themen 3
G SQLServerException abfangen Java Basics - Anfänger-Themen 2
C alle möglichen Datumseingaben im Textfeld abfangen Java Basics - Anfänger-Themen 12
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
M Abfangen von java.lang.NumberFormatException Java Basics - Anfänger-Themen 6
T String: NeueZeile (" ") , Break etc. abfangen Java Basics - Anfänger-Themen 2
B Programm würft Exception, kann sie aber nicht abfangen! Java Basics - Anfänger-Themen 25
M Exceptions bei Textfeldern abfangen Java Basics - Anfänger-Themen 2
M JOptionPane.OK_OPTION abfangen oder disablen? Wie? Java Basics - Anfänger-Themen 3
M jToggleButton Klick abfangen ohne den Button zu deaktivieren Java Basics - Anfänger-Themen 2
B Tastatur abfangen Java Basics - Anfänger-Themen 11
U Pfeiltasten abfangen Java Basics - Anfänger-Themen 2
B Ausnahmen abfangen Java Basics - Anfänger-Themen 3
C Benutzereingaben vor Listener abfangen Java Basics - Anfänger-Themen 5
I InputStream von Konsole abfangen Java Basics - Anfänger-Themen 6
O allgemeine Exceptions abfangen Java Basics - Anfänger-Themen 17
P Auswahl von JComboBox abfangen Java Basics - Anfänger-Themen 3
T jcombobox, item-selektierung abfangen Java Basics - Anfänger-Themen 5
F Fehler beim Schreiben wenn Datei schreibgeschützt abfangen Java Basics - Anfänger-Themen 6
C System.out.println "abfangen"? Java Basics - Anfänger-Themen 8
rambozola selbst definierte exception abfangen funzt nicht Java Basics - Anfänger-Themen 14
S von CommandLine übergebene Parameter abfangen? Java Basics - Anfänger-Themen 12
V Mausklick mit rechter Taste abfangen? Java Basics - Anfänger-Themen 8
C falsche Eingabe abfangen Java Basics - Anfänger-Themen 8
L GUI - Tastaturereignisse abfangen ohne Fokus? Java Basics - Anfänger-Themen 8
D Frage zum abfangen von Exceptions Java Basics - Anfänger-Themen 5
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
W MouseListener Probleme beim Abfangen Java Basics - Anfänger-Themen 8
F Exception in while-Schleife abfangen? Java Basics - Anfänger-Themen 2
F 2 numberformatexception abfangen? Java Basics - Anfänger-Themen 20
ven000m Exception abfangen Java Basics - Anfänger-Themen 9
H JTabel Selectionen abfangen Java Basics - Anfänger-Themen 2
L Java App + Exception abfangen Java Basics - Anfänger-Themen 2
G Fehler abfangen Java Basics - Anfänger-Themen 2
D Falscheingaben abfangen Java Basics - Anfänger-Themen 8
M Negative Werte abfangen Java Basics - Anfänger-Themen 18
G Abfangen von Falscheingaben Java Basics - Anfänger-Themen 4
C Exception abfangen->Klappt nicht ;( Java Basics - Anfänger-Themen 2
S Division durch null abfangen :freak: Java Basics - Anfänger-Themen 14
EagleEye Exception abfangen Java Basics - Anfänger-Themen 15
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
T scanner eingaben erkennen und umtauschen Java Basics - Anfänger-Themen 4
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
S ArrayList Username und passwort mit JTextField eingaben abgleichen Java Basics - Anfänger-Themen 10
TimoN11 Java - Eine oder mehrere Eingaben möglich machen Java Basics - Anfänger-Themen 6
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
M Erste Schritte Mehrere eingaben in einer Line vergleichen (if equals...) Java Basics - Anfänger-Themen 6
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
ralli85 Programm nach einer gewissen Anzahl von Eingaben beenden Java Basics - Anfänger-Themen 15
A Ungültige Eingaben: Fehler ausgeben Java Basics - Anfänger-Themen 16
A Fehler bei der Speicherung von JOptionPane-Eingaben Java Basics - Anfänger-Themen 4
F Erste Schritte Mehrere nextInt() Eingaben nebeneinander ausgeben Java Basics - Anfänger-Themen 12
K Eingaben in Array ausgeben Java Basics - Anfänger-Themen 3
R Scanner-Eingaben addieren Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
R struktogramm eingaben Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben