Bradley Kjell -

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Liebe Javaianer,

Ich bringe mir zur Zeit Programmieren und Java mit Bradley Kjells Java5 Tutorial bei, das ich übrigens jedem Programmieranfänger, der das programmieren mit Java lernen will sehr empfehlen kann.

Zu untenstehendem Programm habe ich zwei wahrscheinlich sehr einfache Fragen

1. Gibt es einen vernünftigen Grund für die Zeile "import java.io.*"? Denn das Kompilieren funktioniert auch ohne wunderbar.

2. Wenn das Programm ausgeführt wird, verlangt es ja die Eingabe eines Fließkommawertes. Anscheinend scheint sich der Scanner dabei an die Ländersettings des OS zu orientieren. Denn die Eingabe von 20,45 wird akzeptiert, während 20.45 zu einem Fehler führt.
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextDouble(Unknown Source)
at RestaurantBill.main(RestaurantBill.java:14)
Die Ausgabe von Fließkommawerten erfolgt aber in der Englischen Notation mit Punkt vor den Dezimalstellen.
Gibt es dahinter eine höhere Designlogik?
Wie könnte ich Java dazu bringen entweder die Ländersettings zu ignorieren oder die Fließkommazahlen mit Komma auszugeben?

Vielen Dank schon mal für's Lesen :)

Code:
import java.io.*;
import java.util.Scanner;

class RestaurantBill
{
  public static void main (String[] args)  
  {
    Scanner scan = new Scanner( System.in );
    double basicCost;
    double tipPercent;

    System.out.print("Enter the basic cost: ");
    basicCost = scan.nextDouble();
    System.out.print("Enter the tip percentage: ");
    tipPercent = scan.nextDouble();

    System.out.println("basic cost: " +  basicCost + " total cost: " + 
         (basicCost + basicCost*0.06 + basicCost*tipPercent) );
  }
}
 
S

SlaterB

Gast
Der import scheint vergessen worden zu sein, ja,

Die Ausgabe von double bzw. Double-Werten kann man wohl nicht überschreiben soweit ich weiß.
Da musst du basicCost durch stringForDouble(basicCost) ersetzen
und in der eigenen Operation stringForDoube(Double) irgendwas sinnvolles anstellen.
Entweder vorgegebene Formatierungsklassen benutzen oder das ganze selber zusammenbasteln
(Ziffern vor dem Komma bestimmen, Komma, Ziffern nach dem Komma).
 
A

Anmeldeboykottierer

Gast
Das mit den Länderspezifischen Einstellungen ist durchaus erwünscht. Ist kein reines Java Problem. Du musst es so sehen, dass die Leute die dein Programm benutzen es nicht unbedingt selbst geschrieben haben. Wenn du deinem Kunden also sagen möchtest: "Sie müssen einen Dezimalpunkt verwenden, Java macht das auch so", könnte dem das nicht gefallen.
Hier entstehen aber auch typische Fehler. Ein paar Windowsprogramme speichern hier auch mit Länderspezifischen Einstellungen die String-Repräsentation von solchen Zahlen ab, passiert dies auf einem deutschen Rechner und wird so an einen englischen weitergereicht (was innerhalb einer Firma vorkommen kann), so knallt es hier einfach mal. Ist immer wieder ein beliebter Fehler.

Gruß Der Anmeldeboykottierer
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben