Frage zu Source Code

  • Hallo,

    habe ein problem mit einem Java Programmierbeispiel. Es geht prinzipiell darum, aus einem File abgespeicherte Daten (Start- und Stopzeiten) auszulesen und daraus Rundenzeiten zu berechnen. Nun bekomme ich beim Versuch des Kompilierens meines Quellcodes immer diese Fehlermeldung:

    "Exception in thread "main" java.lang.NumberFormatException: For input string: "1.259752712926E12" - (dieser String ist der Wert der ersten Zeile meines eingelesenen Files).

    Der Source Code lautet folgendermaßen:

    import java.util.ArrayList;
    import java.util.StringTokenizer;
    import java.util.*;
    import java.io.*;
    /**
    *
    * @author Sicknick
    */
    public class timeStop {
    long laptime;
    int lap;
    String filepath="lapsRecord.txt";

    timeStop (int lap) throws IOException{
    this.lap=lap;
    this.laptime=rundenzeit();
    }

    public long rundenzeit() throws IOException{

    FileReader fr = new FileReader(filepath);

    BufferedReader br= new BufferedReader(fr);

    Scanner sc = new Scanner(br);

    String daten=sc.nextLine();

    String [] datensplit=daten.split("[|\n]");

    long startzeit=Long.parseLong(datensplit [(lap-1)*2]);
    long stopzeit=Long.parseLong(datensplit [lap+lap]);

    laptime=stopzeit-startzeit;

    fr.close();

    br.close();

    return laptime;


    }
    }


    In der main Methode lässt sich dann problemlos eine Instanz der Klasse timeStop bilden, beim Versuch die Methode mit der erzeugten Instanz zu starten stellt sich dann aber ein Laufzeitfehler ein. Kann mir vielleicht wer sagen, ob dieser Code syntaktisch komplett falsch ist oder ob der Hund irgendwo im Detail begraben liegt? Bin leider noch absoluter Java-Laie und kenn mich insbesondere mit Exceptions noch nicht wirklich gut aus, wäre also für jedes Feedback sehr dankbar!!!

    cheers,
    alex

  • "Exception in thread "main" java.lang.NumberFormatException: For input string: "1.259752712926E12" - (dieser String ist der Wert der ersten Zeile meines eingelesenen Files).

    Naja, das ist grundsätzlich so kein Long, sondern eine Zahl in Exponentialschreibweise. Wenn das ein UNIX-Timestamp mit Millisekunden ist (wäre 2.12.2009, 12:18:32 MEZ), dann hau den Punkt und das "E12" raus. Mit dem, was du dann bekommst, fütterst du Long.parseLong().

    Wenn das was anderes ist, dann musst du die Eingabe entsprechend umformen, sodass Long.parseLong oder Float.parseFloat (wenn du eine Gleitkommazahl brauchst) damit zurechtkommen.

  • Naja, das ist grundsätzlich so kein Long, sondern eine Zahl in Exponentialschreibweise. Wenn das ein UNIX-Timestamp mit Millisekunden ist (wäre 2.12.2009, 12:18:32 MEZ), dann hau den Punkt und das "E12" raus. Mit dem, was du dann bekommst, fütterst du Long.parseLong().

    Wenn das was anderes ist, dann musst du die Eingabe entsprechend umformen, sodass Long.parseLong oder Float.parseFloat (wenn du eine Gleitkommazahl brauchst) damit zurechtkommen.


    cool, danke für die rasche auskunft!!! hast du vielleicht auch noch einen tip, mit welchem befehl ich den Punkt und "E12" dynamisch am besten raushau? Ist die replaceAll()-Methode dafür geeignet oder eher weniger?

  • Ist die replaceAll()-Methode dafür geeignet oder eher weniger?

    Ja, kannst du verwenden, musst aber beachten, dass String.replaceAll() als erstes Argument eine Regular Expression verwendet und der Punkt dort eine spezielle Bedeutung hat.

Jetzt mitmachen!

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