尝试从具有不同内容的文件中读取双数据。例如,如果它是双倍,则消息应为“双数为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");
}
}
} //结束课
答案 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()
读取。