打开文件并读取双数据

时间:2012-11-05 23:31:45

标签: java

尝试从具有不同内容的文件中读取双数据。例如,如果它是双倍,则消息应为“双数为23.5”。如果不是双号,则消息应为“六十三不是双号”。文件内容是

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");
}

}

} //结束课

3 个答案:

答案 0 :(得分:2)

你的try-catch应该在while循环中,否则它将在第一个异常中出现,其余的行将被忽略。

答案 1 :(得分:0)

考虑到你的文件格式,我不打算使用Scanner。只需读取每一行,将其传递给Double.valueOf(String)并捕获异常,如果它不是double。

答案 2 :(得分: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来查看下一个元素是否为double,如果使用nextDouble()读取它,否则使用nextLine()读取。