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