Java 查找存储在一个变量中的输入值的平均值,而不使用数组

Java 查找存储在一个变量中的输入值的平均值,而不使用数组,java,binary,sum,average,Java,Binary,Sum,Average,我一直在练习网上下载的一本教科书中的问题,我在书中做了一个程序,要求编写一个程序,搜索一个数字文件,并显示最大数字、最小数字和所有数字的平均值。这个问题还说要使用用writeDouble写的double类型的数字 我已经能够完成所有的要求,除了得到平均分。我知道,当我试图获得数字的平均值时,我所尝试的是不正确的,但我想知道是否存在与我所做的相同的东西,或者如果不存在,我如何在不使用数组的情况下获得数字的平均值?这是我的密码 public static void main(String[] a

我一直在练习网上下载的一本教科书中的问题,我在书中做了一个程序,要求编写一个程序,搜索一个数字文件,并显示最大数字、最小数字和所有数字的平均值。这个问题还说要使用用writeDouble写的double类型的数字

我已经能够完成所有的要求,除了得到平均分。我知道,当我试图获得数字的平均值时,我所尝试的是不正确的,但我想知道是否存在与我所做的相同的东西,或者如果不存在,我如何在不使用数组的情况下获得数字的平均值?这是我的密码

  public static void main(String[] args) {

    Scanner keyboard=new Scanner(System.in);

    System.out.println("Enter file name to be written");
    String file=keyboard.next();

    File fileName=new File(file);

    try{
        FileOutputStream fo=new FileOutputStream(fileName);
        ObjectOutputStream output=new ObjectOutputStream(fo);

        System.out.println("Enter numbers");
        System.out.println("enter q to quit");

        String number;

        do
        { 
            number=keyboard.next();
            if(number.equals("q")){
                output.writeUTF(number);
            }
            else{
                double new_number = Double.parseDouble(number);
                output.writeDouble(new_number);
            }   
        }
        while (!number.equals("q"));

        if(number.equals("q")){
            System.out.println("numbers were written to: "+fileName);
            output.close();
            fo.close();
        }
    }
    catch(FileNotFoundException e){
    }
    catch(IOException e){

    }

    double num=0;
    double num2=0;
    double num_check=0;
    double num3=999999999999999999999.99999;
    int count=0;
    System.out.println("Now the program starts");

    try{
        FileInputStream fi=new FileInputStream(fileName);
        ObjectInputStream input=new ObjectInputStream(fi);

        long file_length=fileName.length();

        for(int i=0;i<file_length;i++){

            num=input.readDouble();
            if(num>=0){
            System.out.println(num);
            }
            if(num>num_check){
                num_check=num;
            }
            else if(num<num3){
                num3=num;
            }
            count++;

        //Here is my attempt at getting the average

        double num_ave=num+num(i+1);
        double average=num_ave/count;
        System.out.println(average);
        System.out.println("Average of all the numbers is: "+average);**
        }
        input.close();
        fi.close();
    }

    catch(FileNotFoundException e){  
    }
    catch(EOFException e){

        System.out.println("Largest number: "+num_check);
        System.out.println("Smallest number: "+num3);

    }
    catch(IOException e){  
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
System.out.println(“输入要写入的文件名”);
字符串文件=键盘.next();
文件名=新文件(文件);
试一试{
FileOutputStream fo=新的FileOutputStream(文件名);
ObjectOutputStream输出=新的ObjectOutputStream(fo);
System.out.println(“输入数字”);
System.out.println(“输入q退出”);
字符串编号;
做
{ 
number=键盘.next();
if(数等于(“q”)){
输出.writeUTF(数字);
}
否则{
double new_number=double.parseDouble(number);
可写输出(新的_编号);
}   
}
而(!number.equals(“q”));
if(数等于(“q”)){
System.out.println(“数字写入:“+文件名”);
output.close();
fo.close();
}
}
catch(filenotfounde异常){
}
捕获(IOE异常){
}
双数=0;
双num2=0;
双数检查=0;
双num3=999999999999999.99999;
整数计数=0;
System.out.println(“现在程序启动”);
试一试{
FileInputStream fi=新的FileInputStream(文件名);
ObjectInputStream输入=新ObjectInputStream(fi);
long file_length=fileName.length();
对于(int i=0;i=0){
系统输出打印项数(num);
}
如果(数值>数值检查){
num_check=num;
}

否则,如果(num批量读取文件中的数据是一种好做法,请关闭文件,然后处理数据

文件长度以字节为单位,而不是以双倍为单位。请使用while(input.hasNext())代替计数器


如果你不能使用数组,那么就使用LinkedList或任何iterable集合。如果这不是你想要的,那么你可以通过排序来做一些事情,尽管中位数可能很困难。

我想这就是你想要做的

  FileInputStream fis = new FileInputStream(fileName);
  try ( Scanner scanner = new Scanner( fis ) ){
    double sum = 0;
    int count = 0;
    while( scanner.hasNextDouble() ){
      double num = scanner.nextDouble();
      count++;
      sum += num;
    }
    double avg = sum/count;
  }
public static void main(String[] args) {

    Scanner keyboard=new Scanner(System.in);

    System.out.println("Enter file name to be written");
    String file=keyboard.next();

    File fileName=new File(file);

    try{
        FileOutputStream fo=new FileOutputStream(fileName);
        ObjectOutputStream output=new ObjectOutputStream(fo);

        System.out.println("Enter numbers");
        System.out.println("enter q to quit");

        String number;

        do
        { 
            number=keyboard.next();
            if(number.equals("q")){
                output.writeUTF(number);
            }
            else{
                double new_number = Double.parseDouble(number);
                output.writeDouble(new_number);
            }   
        }
        while (!number.equals("q"));

        if(number.equals("q")){
            System.out.println("numbers were written to: "+fileName);
            output.close();
            fo.close();
        }
    }
    catch(FileNotFoundException e){
    }
    catch(IOException e){

    }

    double num=0;
    double num2=0;
    double num_check=0;
    double num3=Double.MAX_VALUE;
    int count=0;
    System.out.println("Now the program starts");

    try{
        FileInputStream fi=new FileInputStream(fileName);
        ObjectInputStream input=new ObjectInputStream(fi);
        double num_ave=0;
        long file_length=fileName.length();

        for(int i=0;i<file_length;i++){

            num=input.readDouble();
            if(num>=0){
            //System.out.println(num);
            num_ave+=num;
            }
            if(num>num_check){
                num_check=num;
            }
            if(num<num3){
                num3=num;
            }
            count++;

        //Here is my attempt at getting the average


        double average=num_ave/count;
        System.out.println(average);
        System.out.println("Average of all the numbers is: "+average);
        }
        input.close();
        fi.close();
    }

    catch(FileNotFoundException e){  
    }
    catch(EOFException e){

        System.out.println("Largest number: "+num_check);
        System.out.println("Smallest number: "+num3);

    }
    catch(IOException e){  
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
System.out.println(“输入要写入的文件名”);
字符串文件=键盘.next();
文件名=新文件(文件);
试一试{
FileOutputStream fo=新的FileOutputStream(文件名);
ObjectOutputStream输出=新的ObjectOutputStream(fo);
System.out.println(“输入数字”);
System.out.println(“输入q退出”);
字符串编号;
做
{ 
number=键盘.next();
if(数等于(“q”)){
输出.writeUTF(数字);
}
否则{
double new_number=double.parseDouble(number);
可写输出(新的_编号);
}   
}
而(!number.equals(“q”));
if(数等于(“q”)){
System.out.println(“数字写入:“+文件名”);
output.close();
fo.close();
}
}
catch(filenotfounde异常){
}
捕获(IOE异常){
}
双数=0;
双num2=0;
双数检查=0;
double num3=double.MAX_值;
整数计数=0;
System.out.println(“现在程序启动”);
试一试{
FileInputStream fi=新的FileInputStream(文件名);
ObjectInputStream输入=新ObjectInputStream(fi);
双数平均=0;
long file_length=fileName.length();
对于(int i=0;i=0){
//系统输出打印项数(num);
num_ave+=num;
}
如果(数值>数值检查){
num_check=num;
}

如果(numSum和count,然后将sum除以count。第一条注释没有正确的变量命名,该代码难以辨认。第二条注释,
num3
似乎被设置为一个随机大数-有没有理由不使用
Double.MAX\u VALUE
?您的主要问题似乎是不理解自己的格式并将平均代码放入其中
for
循环。@laune你是什么意思,我该怎么做?你不能根据文件名的长度来确定文件的长度
long file_length=fileName.length()
我认为教科书中的这个练习是为了让读者找到一个解决方案。要求解决stackoverflow问题也许不是一件好事?问题在于:不使用数组。而且,在处理之前将整个文件读入内存很少是好的做法。事实上,我认为相反,我认为如果OP不能使用数组,那么他们也不能使用
列表
集合
队列
或任何其他集合-你的答案仍然是错误的,现在没有抓住重点。这是否解决了
下一个双倍
不使用换行符的问题?你不需要调用
下一个吗行
?请使用
尝试使用资源
清理打开的文件。@BoriseSteider?如广告所示工作-你让我运行一个测试,对你+1!@BoriseSteider我重新运行了更多的测试,有一次似乎出现了错误,但我无法复制它(并且我丢失了执行该测试的shell).您所指问题的任何来源?