Java 查找数组的最小最大值和平均值
我需要找到余额的最小值、最大值和平均值。在使用for循环之前,我已经这样做了,但从未使用while循环。是否有一种方法可以直接从阵列中提取最小-最大和平均值,而不干扰while循环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
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我提到数组只能读取一次。