2017-02-26 5 views
0

私はscan.nextFloat()を実行するときに整数値と浮動小数点値からなるファイルからのみ浮動小数点値を読み込もうとしますが、それでも次の整数値を読み込み浮動小数点数に変換してポイントリストに追加します。以下は私がやっていることです。なぜscan.nextFloat()は浮動小数点値だけを読み取らないのですか?

while(scan.hasNextFloat()) { 
    points.add(scan.nextFloat()); 
} 

サンプル点ファイル

3.3 4

2.3 3 3

にだけそのようなファイルから浮動小数点値を読み取る方法はあります3.3および2.3とした。また、scan.nextFloat()はint値をスキップしている間はfloat値のみを読み込むべきではありませんか?

+1

_「すべきではないscan.nextFloatは()読み取り専用しましたint値をスキップしながら値を浮動させる "_ - aスキャナは、明示的に指示された場合にのみスキップし、スキップする内容を魔法のように決定しません。また、小数点のない数字も有効なfloatです。整数を無視する場合は、それらを無視するように明示的にコーディングする必要があります。 –

+0

ありがとうございました! – smriti

答えて

2

nextFloatは、3のような数字を3.0と読み替えることになります。整数の整数を必要としない場合は、読み込んだ後にフィルタリングするだけです。 (他の回答を参照してください)しかし、あなたは「3.0」ではなく「3」を含めたい場合、あなたは文字列としての値を読み、のみ小数を持っているものを解析する必要があります:

while (scan.hasNext()) { 
    String s = scan.next(); 
    if (s.indexOf('.') != -1) { 
     double d = Double.parseDouble(s); 
     // do something with d... 
    } 
} 
0

によると、 docshasNextFloat()方法

戻り真スキャナの入力内の次のトークンが、nextFloatを使用して浮動小数点値として解釈できる場合()メソッド

nextFloat()状態すなわち(強調鉱山):

(...) 次のトークンは、トークンが全てのロケール固有の接頭辞、グループ区切り、およびロケール固有の接尾辞を除去しているかのようにfloat値に変換され、上記で定義フロート正規表現と一致する場合Character.digitを使用してASCII以外の数字をASCII桁にマッピングし、ロケール固有の負の接頭辞と接尾辞がある場合は負の符号( - )を付加し、結果の文字列をFloat.parseFloatに渡します。トークンがローカライズされたNaNまたは無限大文字列と一致する場合、必要に応じて "Nan"または "Infinity"のいずれかがFloat.parseFloatに渡されます。

Floatは、Decimal、HexFloat、SignedNonNumberのいずれかです。 DecimalにはDecimalNumeralを指定することができます。これは数字であるDigitである可能性があります。

それが理由です。

(あなたのファイルはもちろんの唯一の整数と浮動小数点数が含まれている場合)のみ、浮動小数点値を取るのもう一つの方法はこれです:

while(scan.hasNext() && !scan.hasNextInt()) { 
points.add(scan.nextFloat()); 

}

関連する問題