据我所知,Collections.max
方法实现了一个循环来确定数组的最大值。
但是,由于某些原因,它不会为我返回最大值,而是返回第一个值。我已尝试使用多个数据集,但我一直得到相同的结果。
Scanner input = new Scanner(System.in);
int num;
int inputNum;
ArrayList<Integer> total = new ArrayList<>();
ArrayList<Integer> set1 = new ArrayList<>();
ArrayList<Integer> set2 = new ArrayList<>();
ArrayList<Integer> set3 = new ArrayList<>();
ArrayList<Integer> set4 = new ArrayList<>();
ArrayList<Integer> set5 = new ArrayList<>();
ArrayList<Integer> set6 = new ArrayList<>();
ArrayList<Integer> set7 = new ArrayList<>();
ArrayList<Integer> set8 = new ArrayList<>();
ArrayList<Integer> set9 = new ArrayList<>();
System.out.println("Please enter the values of your dataset"
+ " (between 1-50. Once you are done filling it in,"
+ " please type any number greater than 51.");
do {
// Sort the values here
inputNum = input.nextInt();
if (6 > inputNum) {
total.add(inputNum);
set1.add(inputNum);
} else if (11 > inputNum && inputNum > 5) {
total.add(inputNum);
set1.add(inputNum);
} else if (11 > inputNum && inputNum > 5) {
total.add(inputNum);
set2.add(inputNum);
} else if (16 > inputNum && inputNum > 10) {
total.add(inputNum);
set3.add(inputNum);
} else if (21 > inputNum && inputNum > 15) {
total.add(inputNum);
set4.add(inputNum);
} else if (26 > inputNum && inputNum > 20) {
total.add(inputNum);
set4.add(inputNum);
} else if (31 > inputNum && inputNum > 25) {
total.add(inputNum);
set5.add(inputNum);
} else if (36 > inputNum && inputNum > 30) {
total.add(inputNum);
set6.add(inputNum);
} else if (41 > inputNum && inputNum > 35) {
total.add(inputNum);
set7.add(inputNum);
} else if (46 > inputNum && inputNum > 40) {
total.add(inputNum);
set8.add(inputNum);
} else if (51 > inputNum && inputNum > 45) {
total.add(inputNum);
set9.add(inputNum);
}
} while (51 > inputNum);
//find average, maximum, range, median, histogram
int sum = 0;
for (double i : total)
sum += i;
System.out.println("sum total of dataset: "+ sum);
double sizeTotal = total.size();
System.out.println("number of data points entered: " + sizeTotal);
double average = sum / sizeTotal;
System.out.println("The average value of your data is: " + average);
//maximum
Collections.max(total);
System.out.println("The highest value in the array is: " + total.get(0));
答案 0 :(得分:2)
只需将最后一行更改为:
System.out.println("The highest value in the array is: " + Collections.max(total));
你会得到正确的结果。
Collections.max(total)
不会对集合进行排序/更改。它只返回最大值。
答案 1 :(得分:1)
Collections.max()不返回已排序的集合 如果您想要列表中的最大值,请将代码修改为
Integer highest = Collections.max(total);
System.out.println("The highest value in the array is: " + highest);
答案 2 :(得分:0)
这里你干得好干净。
Collection.max()
会返回最大值,total.get(0)
仍然会为您提供最初存储的值。
您可以看到相同here的良好实现。
import java.util.*;
public class HelloWorld{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int num;
int inputNum;
ArrayList<Integer> total= new ArrayList<Integer>();
ArrayList<Integer> set1= new ArrayList<Integer>();
ArrayList<Integer> set2= new ArrayList<Integer>();
ArrayList<Integer> set3= new ArrayList<Integer>();
ArrayList<Integer> set4= new ArrayList<Integer>();
ArrayList<Integer> set5= new ArrayList<Integer>();
ArrayList<Integer> set6= new ArrayList<Integer>();
ArrayList<Integer> set7= new ArrayList<Integer>();
ArrayList<Integer> set8= new ArrayList<Integer>();
ArrayList<Integer> set9= new ArrayList<Integer>();
System.out.println("Please enter the values of your dataset (between 1-50. Once you are done filling it in, please type any number greater than 51.");
do {
//sort the values here
inputNum = input.nextInt();
if (6 > inputNum){
total.add(inputNum);
set1.add(inputNum);
}
else if (11 > inputNum ){ // obviously it is greater than 5 otherwise it won't come to the else part.
total.add(inputNum);
set1.add(inputNum);
}
else if (11 > inputNum ){
total.add(inputNum);
set2.add(inputNum);
}
else if (16 > inputNum ){
total.add(inputNum);
set3.add(inputNum);
}
else if (21 > inputNum){
total.add(inputNum);
set4.add(inputNum);
}
else if (26 > inputNum){
total.add(inputNum);
set4.add(inputNum);
}
else if (31 > inputNum){
total.add(inputNum);
set5.add(inputNum);
}
else if (36 > inputNum){
total.add(inputNum);
set6.add(inputNum);
}
else if (41 > inputNum){
total.add(inputNum);
set7.add(inputNum);
}
else if (46 > inputNum){
total.add(inputNum);
set8.add(inputNum);
}
else if (51 > inputNum){
total.add(inputNum);
set9.add(inputNum);
}
}
while (51 > inputNum);
//find average, maximum, range, median, histogram
//average
int sum = 0;
for (double i : total)
sum += i;
System.out.println("sum total of dataset: "+ sum);
double sizeTotal = total.size();
System.out.println("number of data points entered: " + sizeTotal);
double average = sum / sizeTotal;
System.out.println("The average value of your data is: " + average);
//=======
//maximum
int max = Collections.max(total);
System.out.println("The highest value in the array is: " + max);
}
}
Stdin输入:
3 8 13 18 28 58
输出:
Please enter the values of your dataset (between 1-50. Once you are done filling it in, please type any number greater than 51.
sum total of dataset: 70
number of data points entered: 5.0
The average value of your data is: 14.0
The highest value in the array is: 28
答案 3 :(得分:0)
方法Collections#max
执行不排序您的收藏。它找到并返回最大值。
引用其documentation:
根据元素的自然排序,返回给定集合的最大元素。
非常重要:
此方法遍历整个集合,因此需要时间与集合的大小成比例。
因此操作不 快。如果性能确实很重要,您可以记住并更新构建集合时的最大值。
现在让我们来看看您当前的代码:
Collections.max(total);
System.out.println("The highest value in the array is: " + total.get(0));
您的通话Collections.max(total)
正确计算并返回最大值,但您未捕获 返回值,您只需将其丢弃< /强>
对total.get(0)
的调用会正确返回您的集合中的第一个元素。但由于Collections#max
未按顺序更改任何内容,因此此元素仍然相同,可能不是最大值。
不是假设方法对集合进行排序,您只需使用其返回值,这是您要搜索的最大值:
int maxValue = Collections.max(total);
System.out.println("The highest value in the array is: " + maxValue);
或者不将值存储在变量中:
System.out.println("The highest value in the array is: " + Collections.max(total));