Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找数组的最小最大值和平均值_Java_Arrays_Max_Average_Min - Fatal编程技术网

Java 查找数组的最小最大值和平均值

Java 查找数组的最小最大值和平均值,java,arrays,max,average,min,Java,Arrays,Max,Average,Min,我需要找到余额的最小值、最大值和平均值。在使用for循环之前,我已经这样做了,但从未使用while循环。是否有一种方法可以直接从阵列中提取最小-最大和平均值,而不干扰while循环 10 Helene 1000 Jordan 755 Eve 2500 Ken 80 Andrew 999 David 1743 Amy 12 Sean 98 Patrick 7 Joy 14 其中10是账户数量 import java.util.*; import java.io.*; import java.ut

我需要找到余额的最小值、最大值和平均值。在使用for循环之前,我已经这样做了,但从未使用while循环。是否有一种方法可以直接从阵列中提取最小-最大和平均值,而不干扰while循环

10
Helene 1000
Jordan 755
Eve 2500
Ken 80
Andrew 999
David 1743
Amy 12
Sean 98
Patrick 7
Joy 14
其中10是账户数量

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

public class bankaccountmain {

public static void main(String[] args) throws FileNotFoundException {
    Scanner inFile = null;
    try {
        inFile = new Scanner(new File("account.txt"));
        ;
    } catch (FileNotFoundException e) {
        System.out.println("File not found!");

        System.exit(0);
    }
    int count = 0;
    int accounts = inFile.nextInt();
    String[] names = new String[accounts];
    int[] balance = new int[accounts];
    while (inFile.hasNextInt()) {
        inFile.next();
        names[count] = inFile.next();
        inFile.nextInt();
        balance[count] = inFile.nextInt();
        count++;
    }
    System.out.println(Arrays.toString(names));
    System.out.println(Arrays.toString(balance));
    }
}

当您将值存储在
balance[count]
中时,您已经从文件中取出了这些值。然后,您可以使用刚才读取的值进行计算:

    int min = Integer.MAX_VALUE;
    int max = 0;
    int total = 0;
    while (inFile.hasNext()) {
        names[count] = inFile.next();
        balance[count] = inFile.nextInt();  // balance[count] now is storing the value from the file

        if (balance[count] < min) {  // so I can use it like any other int
            min = balance[count];
        }
        if (balance[count] > max) {  // like this
            max = balance[count];
        }
        total += balance[count]; // and this
        count++;
    }
    double avg = (double)total/count;
int min=Integer.MAX\u值;
int max=0;
int-total=0;
while(infle.hasNext()){
名称[计数]=infle.next();
balance[count]=infle.nextInt();//balance[count]现在正在存储文件中的值
如果(balance[count]max){//像这样
最大值=余额[计数];
}
合计+=余额[计数];//这
计数++;
}
双平均=(双)总数/计数;

azurefrog的答案正确且可接受(+1)

但我个人更喜欢避免“混合”太多的功能。在这种情况下:我认为

  • 从文件中读取值,然后
  • 计算最小/最大/平均值
应该是单独的操作

计算
int[]
数组的最小/最大/平均值是一种非常常见的操作。它非常常见,可能已经实现了数千次(遗憾的是,在Java8之前的标准API中没有此功能)

但是,如果我必须实现这样的东西(并且不愿意或不允许使用复杂的库解决方案,例如Apache Commons Math的库),我会选择一些实用方法:

static int min(int array[]) 
{
    int result = Integer.MAX_VALUE;
    for (int a : array) result = Math.min(result, a);
    return result;
}

int max(int array[]) 
{
    int result = Integer.MIN_VALUE;
    for (int a : array) result = Math.max(result, a);
    return result;
}

static int sum(int array[]) 
{
    int result = 0;
    for (int a : array) result += a;
    return result;
}

static double average(int array[]) 
{
    return (double)sum(array)/array.length;
}
另一个优点(除了“关注点分离”的“纯粹主义者”观点之外)是这些方法是可重用的。您可以将它们放入一个
IntArrays
实用程序类中,无论何时需要此功能,您都可以调用这些方法

如果您已经可以使用Java8,那么它就更简单了,因为这些操作现在(最后!)正是标准API的一部分。它们是在类中提供的,它正好包含您需要的
min()
max()
average()
方法。在那里你可以写一些类似的东西

int min = IntStream.of(balance).min().getAsInt();
int max = IntStream.of(balance).max().getAsInt();
double average = IntStream.of(balance).average().getAsDouble();

那么你遇到了什么问题呢?嗯……用while循环和for循环没有区别;您可以在循环外为最小、最大、总计和计数设置变量。您可以围绕内嵌对象循环更新最小值、最大值、总数和计数。当您退出循环时,您有min、max,平均值是total/count。你的问题是什么?在Java 8中,使用集合和流API,你可以不用循环就可以完成,但我不确定你的确切问题是什么,我也不知道你的代码是什么,或者它应该做什么。在这种情况下,你需要读取数组三次,而azurefrog只读取它once@Lordofdark我提到数组只能读取一次。