Eingabe Kommazahlen über Scanner

Hallo zusammen

ich habe folgendes Problem:

Ich muss für die Schule bis Donnerstag ein Projekt geschrieben haben und habe momentan noch ein paar "Problemchen"

Code Klasse:
Java:
package com.mycompany.einrad;

import java.util.Scanner;
import java.math.*;

public class Einrad {
    Scanner scanner=new Scanner(System.in);
    
    //private Variablen
    private int speichenzahl;
    private boolean fahrfaehig;
    String treterform;
    
    //public Variablen
    public double luftdruck, sitzhoehe;
    
    //Konstruktor Einrad
    public Einrad(double sitzhoehe, int speichenzahl, boolean fahrfaehig, double luftdruck){
        this.speichenzahl=speichenzahl;
        this.fahrfaehig=fahrfaehig;
        this.luftdruck=luftdruck;
        this.sitzhoehe=sitzhoehe;
    }
    
            //Setter Methoden

        public void setFahrfaehig(double luftdruck){
        
            if(this.luftdruck>=1 && this.luftdruck<=3){
                this.fahrfaehig=true;
            }
            else{
                this.fahrfaehig=false;
            }       
        }
        
        public void setLuftdruck(double luftdruck){
        System.out.println("Wieviel Luftdruck ist noch im Reifen?");
        this.luftdruck = scanner.nextDouble();
        }
        
        public void setTreterform(String treterform){
        System.out.println("Welche Form haben die Treter (gerade, schief): ");
        this.treterform = scanner.nextLine();
        }
                
        //Getter Methoden
        public void setSitzhoehe(double sitzhoehe){
        System.out.println("Wie hoch ist das Einrad?");
        this.sitzhoehe = scanner.nextDouble();
        }
        
        public void getSitzhoehe(){
        System.out.println("Die Sitzhoehe beträgt: " +this.sitzhoehe +" cm");
        }
        
        public boolean getFahrfaehig(){
            return this.fahrfaehig;
        }
         
        public String getLuftdruck(){
            return "Der Luftdruck im Reifen ist: " +this.luftdruck + " bar. Und gerundet bei: " +Math.round(this.luftdruck) + " bar";
        }
    
        public void getTreterform(){
            System.out.println("Das Einrad hat die Treterform " +this.treterform);
        }
}

Code Main:
Java:
package com.mycompany.einrad;

import java.util.Scanner;
import java.math.*;

public class Main {
    
    public static void main(String[] args){
        
        //Objekterzeugung NR1
        Einrad Eins = new Einrad(0, 0, true, 0);
        
        Eins.setSitzhoehe(Eins.sitzhoehe);
        [B][I]Eins.getSitzhoehe();[/I][/B]
        
        //Methodenaufruf Setter und Getter Methoden
        Eins.setLuftdruck(Eins.luftdruck);
        [I][B]Eins.getLuftdruck();[/B][/I]
        
        Eins.setTreterform(Eins.treterform);
        Eins.getTreterform();
        
        //Methodenaufruf mit Ausgabe
        System.out.println("Ist das Einrad fahrfähig: " +Eins.getFahrfaehig());      
     }
    
    
}
Wenn ich bei den markierten Stellen eine Kommazahl eingeben will, spuckt mir die Konsole eine Fehlermeldung aus.

Code:
Fehlermeldung: 
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
    at com.mycompany.einrad.Einrad.setLuftdruck(Einrad.java:41)
    at com.mycompany.einrad.Main.main(Main.java:42)
Command execution failed.
org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:404)
    at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:166)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:764)
    at org.codehaus.mojo.exec.ExecMojo.executeCommandLine(ExecMojo.java:711)
    at org.codehaus.mojo.exec.ExecMojo.execute(ExecMojo.java:289)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:199)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 06:03 min
Finished at: 2019-12-02T14:02:49+01:00
Final Memory: 7M/27M
------------------------------------------------------------------------
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.5.0:exec (default-cli) on project Einrad: Command execution failed. Process exited with an error: 1 (Exit value: 1) -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.
Re-run Maven using the -X switch to enable full debug logging.

For more information about the errors and possible solutions, please read the following articles:
[Help 1] [URL]http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException[/URL]
Check Maven network proxy...
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich bei den markierten Stellen eine Kommazahl eingeben will, spuckt mir die Konsole eine Fehlermeldung aus.

Fehlermeldung:
Exception in thread "main" java.util.InputMismatchException
Lies mal den Bereich "Localized Numbers" hier: https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Scanner.html

Das Problem liegt sicher an den Dezimal- und Tausendertrennzeichen, die in anderen Localen durchaus anders sind.
Bei den Engländern z.B. ist . das Dezimaltrennzeichen und , das Tausendertrennzeichen

Du kannst mit Scanner::useLocale(locale) die Locale umstellen, siehe: https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/Scanner.html#useLocale(java.util.Locale)
 
Der Hinweis mit Locale scheint zu passen, Beispielausgabe mit Eclipse (ohne Mojo/...-Plugins) (allerdings sollte man den Benutzer vorher auf gültige Eingabewerte hinweisen und diese im Programmfluss entsprechend würdigen):
Wie hoch ist das Einrad?
123,6
Die Sitzhoehe beträgt: 123.6 cm
Wieviel Luftdruck ist noch im Reifen?
23,6
Welche Form haben die Treter (gerade, schief):
Das Einrad hat die Treterform
Ist das Einrad fahrfähig: true
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben