0

内容が異なるファイルから二重のデータを読み込もうとしています。たとえば、それが double の場合、メッセージは「Double number is 23.5」になります。倍数でない場合、メッセージは「63 は倍数ではありません」となるはずです。ファイルの内容は

97.9

100.1

六十三

77

12.4

3002.4

76

涼しい

34.6

これです

…………

私が書いたコードはファイルを開き、次の行をスキャンしますが、正しく動作していないようです。

class ReadDouble 
 {

 Scanner scan = new Scanner(System.in);


try

{

    File textFile = new File ("doubleData.txt");
    Scanner scanFile = new Scanner (textFile);
    String str = scan.nextLine();

    while(scanFile.hasNextLine())
    {

        double num = Double.parseDouble(str);
        if(str == num)
        {
            System.out.println("Double number is" + str);
        }

    }//end while


}//end try

catch (NumberFormatException nfe)
{
   System.out.println(str + "Is not a Double number");
}

}

}//クラス終了

4

3 に答える 3

2

try-catch は while ループ内にある必要があります。そうしないと、最初の例外で出てきて、残りの行は無視されます。

于 2012-11-05T23:35:18.893 に答える
0

まず、ループ内で呼び出す必要がString str = scan.nextLine();あります。そうしないと、最初の行しか読み取れません。また、ブロックはループ内try / catchでラップする必要があります。そうしないと、最初の非 double に遭遇した後に別の呼び出しを行うことはありません。double num = Double.parseDouble(str);whilescan.nextLine()

if(str == num)最後に、これは常に false になるため、実行しないでください。Double.parseDouble(str)例外をスローしない場合は、その行で見つかった double が含まれます。

標準から読み取るソリューションは次のとおりです。

import java.util.Scanner;

public class ReadDouble {

    public static void main(String[] args){
        Scanner scan = new Scanner (System.in);

        while(scan.hasNextLine()){
        String str = scan.nextLine();

        try {
            num = Double.parseDouble(str);
            System.out.println("Double number is " + num);
        } catch (NumberFormatException nfe) {
            System.out.println(str + " is not a Double number");
        }       
    }
}
}

別のオプションはScanner、次の要素が であるdoubleかどうかを確認するために をnextDouble()使用することですnextLine()

于 2012-11-05T23:48:14.360 に答える
0

あなたのファイル形式を考えると、スキャナーは気にしません。各行を読み取り、それを Double.valueOf(String) に渡し、double でない場合は例外をキャッチします。

于 2012-11-05T23:36:59.193 に答える