Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Beide Zahlen sind Gleitkommazahlen
und nur immer die erste wird als Zahl erkannt (hasNextDouble, hasNextFloat).
Hängt es damit zusammen,
dass die zweiten Zahlen kleiner als 1 sind und mit einer 0 beginnen ?
..nein, es liegt an Deiner Schleife!
Du sagst ja 'Solange der Scanner eine Zeile hat' !
Nun und im Schleifenrumpf liest Du genau immer nur den ersten Wert der Zeile aus!
Ergo, Dein Programm macht was Du geschrieben hast! *fg* *morphy lässt grüssen*
ist WAHR, wenn der Scanner vor dem nächsten Token steht
(Java-Referenz) Returns true if this scanner has another token in its input.
Und eine Zeile kann mehrere Tokens beinhalten, z.B. Zahl1 und Zahl 2
zweitens :
zwei erste Zahlen (die erste Zeile) sind 0.0 und 0.0 -
die werden gleich als Strings eingelesen,
nicht mal eine wird als Double oder als Float erkannt.
Das Harte dabei ist, dass es kopiert von "Klassikern" ist.
Ich habe nichts Konkurrentes zum Vergleich.
habs gerade mal getestet und bin auch auf Probleme gestossen. Hab dann in meiner angelegten "data.txt" mal alle Punkte durch Kommas ersetzt (also 0,0 statt 0.0 und zB 1,3 und -4,52), dann hat er mir das korrekt eingelesen. Find ich selber auch etwas seltsam...
Falls du keinen Einfluss auf die "data.txt" hast, kannst du ja die "String.replace('.', ',')" Methode benutzen, um alle Punkte in Kommas zu verwandeln.
Ich bin weiterhin über meinen Zweifel mit dem Scanner irritiert
aber ich habe mittlerweile StreamTokenizer eingesetzt.
verkürztes und verändertes Beispiel aus "Java ist auch eine Insel" - Ausschnitt aus Listing 12.43
Code:
import java.io.*;
class StreamTokenizerDemo
{
public static void main(String[] args)
{
String fileName = args[0];
StreamTokenizer st = new StreamTokenizer(neew FileReader(fileName));
st.parseNumbers();
st.eolIsSignificant( true );
// die Aktion des Lesens startet
for ( int tval; (tval = st.nextToken()) != StreamTokenizer.TT_EOF; )
{
//ich habe alles nicht-numerische von hier rausgeschnitten - Original ist Superklasse !
if ( tval == StreamTokenizer.TT_NUMBER )
{
//wenn der Tokenizer etwas, wie eine Zahl findet,
//soll sie irgendwie versuchsweise als Zahl verarbeiten)
System.out.println( "Zahl: " + st.nval +" und ihr Quadrat: " + st.nval*st.nval );
}
}
}
}
Damit habe ich mich selbst gestillt.
Jedenfalls bin ich neugierig, ob jemand den Scanner zähmen kann.