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的问题吧,求教

解决方案 »

  1.   

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

  2.   

    while((line=br.readLine())!=null){
    line=line.trim();
    if("".equals(line)){
    continue;
    }
    total+=Integer.parseInt(line);
    n++;
    }注意去掉空行,编码时要小心。
      

  3.   

    谢谢!  确实我aa.txt最后一个数字后面多了一个空格,使用line读取的时候,最后一行数字+空格,先转为String类型,再转换为int型,出错。这些小细节确实需要注意!
      

  4.   

    你的
    if("".equals(line)){
    continue;
    }这条代码,你想的很全面啊,若aa.txt中存在“”这种空值,就可以跳过,再执行一次循环条件,而不是,while中的语句!高手
      

  5.   

    lz你这代码里面avg虽然声明为double,但是total/n一定是一个整形的,需要强转(double)total/n
      

  6.   

    package Array_com;
    import java.io.*;
    import javax.swing.JOptionPane;
    public class Array1 {
    public double avg=0.0;
    public Array1() throws IOException{
    this.initavg();
    }
    private void initavg()  throws IOException{
    BufferedReader br =null;
    try {
    br= new BufferedReader(new FileReader(new File("d:/1.txt")));
    double i=0.0;
    double j=0.0;
    while(br.ready()){
    //System.out.println(br.readLine());
    int a=0;
    try {
    a = Integer.parseInt( br.readLine());
    } catch (NumberFormatException e) {
    j++;
    continue;
    }
    avg+=a;
    i++;
    }
    System.out.println("数据总数为"+(i+j)+"个,可用数据为"+i+"个,只计算可读数据的平均值");
    if(i==0){
    JOptionPane.showMessageDialog(null, "无可用成绩");
    }else{
    avg = avg/i;
    }
    } finally{
    br.close();
    }
    } public static void main(String[] args) {
    try {
    System.out.println(new Array1().avg);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }