2013-04-29 87 views
1

这里是我的代码:写整数文件错误

public static void main(String[] args) throws IOException { 
     writeToFile ("c:\\scores.txt"); 
     processFile("c:\\scores.txt"); 
    } 
    public static void writeToFile (String filename) throws IOException { 
     BufferedWriter outputWriter = new BufferedWriter(new FileWriter(filename)); 
     Scanner reader = new Scanner (System.in); 
     int Num; 
     System.out.println ("Please enter 7 scores"); 
      for (int i = 0; i < 7; i++) { 

       Num= reader.nextInt(); 

       outputWriter.write(Num);  

       if(i!=6) { 
        outputWriter.newLine(); 
       } 
      } 

     outputWriter.flush(); 
     outputWriter.close(); 
} 

    public static void processFile (String filename) throws IOException, FileNotFoundException 
    { 
     double sum=0.00; 
     double number; 
     double average; 
       int count = 0; 
     BufferedReader inputReader = new BufferedReader (new InputStreamReader(new FileInputStream(filename))); 
     String line; 

     while((line = inputReader.readLine()) != null) 
     { 
      number= Double.parseDouble(line); 
         System.out.println(number); 
         count ++; 
      sum += (number); 
      System.out.print ("Total Sum: "); 
      System.out.println(sum); 
      System.out.print("Average of Scores: "); 
      average=sum/count; 
      System.out.println(average); 
     }  
     inputReader.close(); 
    } 

这是我的输出是什么。

Please enter 7 scores 
2 
3 
5 
6 
8 
9 
1 
Exception in thread "main" java.lang.NumberFormatException: empty String 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1011) 
    at java.lang.Double.parseDouble(Double.java:540) 
    at writefile.Writefile.processFile(Writefile.java:52) 
    at writefile.Writefile.main(Writefile.java:19) 
Java Result: 1 

我不知道如何解决这个问题。我不知道如何fiz浮动十进制或空字符串错误。该文件中有奇怪的符号,没有整数。我该如何解决?请具体请,因为我只是Java的初学者。发生

+0

哪条线导致异常 - 第52和19行的Writefile.java? – 2013-04-29 03:17:39

回答

1

的错误,因为line是一个空字符串在某些时候,检验这种解析字符串之前:

while ((line = inputReader.readLine()) != null) { 
    if (line.trim().length() > 0) { 
     number = Double.parseDouble(line); 
     // rest of loop 
    } 
} 

也就是说,假设该行只包含数字。如果还有其他字符,则必须在解析该行之前执行更仔细的验证。

+1

我通常做'if(line!= null &&!line.trim()。isEmpty()){...}'1+ – 2013-04-29 03:21:02

+0

该行可能只包含非数字数据。 – 2013-04-29 03:22:06

2

outputWriter.write(1);并不意味着outputWriter.write("1"); 您需要更改outputWriter.write(Num);outputWriter.write(""+Num); 请参阅outputstream.write(int)

+0

这是问题的根源。但是,您应该将OP引用到['BufferedWriter.write(int)'](http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html#write%28int%29) (因为'outputWriter'是一个'BufferedWriter')。此外,它更清晰,可能更有效(取决于编译器)使用'Integer.toString(Num)'而不是''“+ Num'。 – 2013-04-29 03:28:50

+0

是的,完全同意。或者使用'String.valueOf(Num)'。谢谢。还有一个问题,'outputWriter.write('0'+ Num)''怎么办? – andy 2013-04-29 03:31:53

+0

恩,''0'+ Num'不会做任何事情。它只适用于-1 2013-04-29 04:31:49

1

该文件中有奇怪的符号,没有整数。

BufferedWriter#write(int)

写入单个字符。

所以它不是写你发送给它的int值,而是它的字符表示。

如果您只是将数值写入String,然后将其检索为String并解析它,那会更好。在您的writeToFile方法中,修改此部分

for (int i = 0; i < 7; i++) { 
    Num = reader.nextInt(); 
    outputWriter.write(Integer.toString(Num));  
    if(i!=6) { 
     outputWriter.newLine(); 
    } 
} 
+0

或者,也许更清楚,'Integer.toString(Num)'。 – 2013-04-29 03:30:27

+0

@TedHopp是的,这也可以。 – 2013-04-29 03:31:36