日期:2014-05-20  浏览次数:20628 次

输入输出流,循环问题
F盘下有aa.txt文件内容如下
60
70
65
70...如此竖排顺序往下,共17个数字

求其平均数
package demo1; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader;    
public class AVGStream {        
public static void main(String[] args) {         
try{         
File file=new File("F:\\aa.txt");         
FileInputStream fis=new FileInputStream(file);         
InputStreamReader is=new InputStreamReader(fis);         
BufferedReader br=new BufferedReader(is);         
String line=null;         
int n = 0;         
double total = 0;         
while((line=br.readLine())!=null)
{
total+=Integer.parseInt(line);
n++;
}
double avg=(total/n);
System.out.println(avg);
}
catch(Exception ex)
{}

}

打了断点,while循环到16个都可以正常累加,但是第17个就报错了,错误代码为:
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:838]
百度搜索为JDK问题,我将while循环改成for,虽然只能执行2位相加但是能正常输出,应该不是JDK的问题吧,求教

------解决方案--------------------
用你的代码我做了下测试,按你的要求我发现没错!!但我发现要是把你的aa.txt中的某行数字的前面或者后面加上空格时就不能打印出结果,建议楼主把
 total+=Integer.parseInt(line);
这行代码改为 
total+=Integer.parseInt(line.trim());
看一下行不
------解决方案--------------------
while((line=br.readLine())!=null){
line=line.trim();
if("".equals(line)){
continue;
}
total+=Integer.parseInt(line);
n++;
}

注意去掉空行,编码时要小心。