0

试图从具有不同内容的文件中读取双重数据。例如,如果它是双倍,那么消息应该是“双倍数是 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

鉴于您的文件格式,我不会打扰扫描仪。只需阅读每一行,将其传递给 Double.valueOf(String) 并在它不是双精度时捕获异常。

于 2012-11-05T23:36:59.193 回答
0

首先,您应该String str = scan.nextLine();在循环内调用,否则您只会阅读第一行。此外,您的try / catch块应该被包裹double num = Double.parseDouble(str);在循环中,否则在遇到第一个非双精度后while您将不会再次调用。scan.nextLine()

最后,你不应该这样做if(str == num),因为这总是错误的。如果Double.parseDouble(str)不抛出异常,则它包含在该行上找到的双精度。

这是一个从标准中读取的解决方案:

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来查看下一个元素是否是 adouble如果它是使用读取它,nextDouble()否则使用读取nextLine()

于 2012-11-05T23:48:14.360 回答