在java中读取数字文件并计算平均值

在java中读取数字文件并计算平均值,java,bufferedreader,filereader,Java,Bufferedreader,Filereader,我有一个名为“averages”的TXT文件,它看起来像: 1 4 5 3 -1 2 8 9 3 2 -1 4 8 15 16 23 42 -1 3 -1 我希望能够读入每一行,并在达到“-1”时计算每一行的平均值。我已经编写了读取文件并将其打印到命令行的代码,我只是很难找到每行的平均值。任何帮助都将不胜感激。谢谢 import java.io.*; import java.util.*; public class Test { public static void main(St

我有一个名为“averages”的TXT文件,它看起来像:

1 4 5 3 -1
2 8 9 3 2 -1
4 8 15 16 23 42 -1
3 -1
我希望能够读入每一行,并在达到“-1”时计算每一行的平均值。我已经编写了读取文件并将其打印到命令行的代码,我只是很难找到每行的平均值。任何帮助都将不胜感激。谢谢

import java.io.*;
import java.util.*;

public class Test {

    public static void main(String[] args) {
        BufferedReader reader = null;

        try {
            String currentLine;

            reader = new BufferedReader(new FileReader("averages.txt"));
            while  ((currentLine = reader.readLine()) != null) {
                System.out.println(currentLine);
            }
        } catch (IOException err) {
            err.printStackTrace();
        } finally {
            try {
                if (reader != null)reader.close();
            } catch (IOException err) {
                err.printStackTrace();
            }
        }

}
}

我想试试这样的东西:

int sum = 0;

String[] values = currentLine.split(" ");

for (String value : values) {
    int n = Integer.parseInt(value);

    if (n < 0) {
        break;
    }

    sum += n;
}

int count = values.length - 1;
// calculate average from sum and count
int和=0;
字符串[]值=currentLine.split(“”);
for(字符串值:值){
int n=Integer.parseInt(值);
if(n<0){
打破
}
总和+=n;
}
int count=value.length-1;
//根据总和和计数计算平均值

您可以通过执行以下操作来完成:

  • 使用拆分方法拆分
    currentLine

    String[] nums = currnetLine.split("\\s+");
    
  • 循环
    nums
    并将每个元素解析为
    int
    ,然后将其添加到
    sum
    变量

    int sum = 0;
    for (int i = 0; i < nums.length; i++) {
        int num = Integer.parseInt(nums[i]);
        if(num != -1) {
            sum += num;
        }
    }
    

在Java 7+中,Scanner对象可用,并具有多种有用的功能

1.)首先读取行中的内容 扫描仪=新扫描仪(“151252”)

2.)从上面的代码可以看出,如果您有一个空格分隔符,那么很容易使用它 scanner.useDelimiter(“”)

3.)如果scanner.hasNext()为下一个字符串,则scanner.next()为下一个字符串

使用Integer.parseInt(“1”)迭代列表以获取值、总和,然后求平均值。

请尝试以下操作:

import java.io.*;
import java.util.*;

public class Test {

    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            String currentLine;
            reader = new BufferedReader(new FileReader("averages.txt"));
            while  ((currentLine = reader.readLine()) != null) {
                System.out.println(currentLine);
                StringTokenizer st=new StringTokenizer(currentLine," ");
                int count=st.countTokens();
                int array[]=new int[count-1];
                int i=0;
            while(st.hasMoreTokens()&&i!=count-1)
             {
                array[i]=Integer.valueOf(st.nextToken());
                i=i+1;
             }
        int sum=0;
            for(int x=0;x<array.length;x++)
                {
                    sum=sum+array[x];
                }
        float average=(float)sum/array.length;
        System.out.println("The average of this line is: "+average);
            }
        } catch (IOException err) {
            err.printStackTrace();
        } finally {
            try {
                if (reader != null)reader.close();
            } catch (IOException err) {
                err.printStackTrace();
            }
        }
}
}
import java.io.*;
导入java.util.*;
公开课考试{
公共静态void main(字符串[]args){
BufferedReader reader=null;
试一试{
串电流线;
reader=newbufferedreader(newfilereader(“averages.txt”);
while((currentLine=reader.readLine())!=null){
系统输出打印项次(当前行);
StringTokenizer st=新的StringTokenizer(currentLine,“”);
int count=st.countTokens();
int数组[]=新的int[count-1];
int i=0;
而(st.hasMoreTokens()&&i!=count-1)
{
数组[i]=Integer.valueOf(st.nextToken());
i=i+1;
}
整数和=0;

对于(intx=0;xSo,在这种情况下,平均值是sum/nums.length?啊,这是有道理的。我没有得到-1部分。非常感谢!
import java.io.*;
import java.util.*;

public class Test {

    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            String currentLine;
            reader = new BufferedReader(new FileReader("averages.txt"));
            while  ((currentLine = reader.readLine()) != null) {
                System.out.println(currentLine);
                StringTokenizer st=new StringTokenizer(currentLine," ");
                int count=st.countTokens();
                int array[]=new int[count-1];
                int i=0;
            while(st.hasMoreTokens()&&i!=count-1)
             {
                array[i]=Integer.valueOf(st.nextToken());
                i=i+1;
             }
        int sum=0;
            for(int x=0;x<array.length;x++)
                {
                    sum=sum+array[x];
                }
        float average=(float)sum/array.length;
        System.out.println("The average of this line is: "+average);
            }
        } catch (IOException err) {
            err.printStackTrace();
        } finally {
            try {
                if (reader != null)reader.close();
            } catch (IOException err) {
                err.printStackTrace();
            }
        }
}
}