Java – 使用数组查找/打印最小/最大值?

问题: 如何从数组中找到min / max以及语法是什么样的?

(( 编辑:开始处理它可能看起来像什么(在这篇文章的底部),但我没有正确的语法 ))

想在我的主类中创建一个方法,以便从一系列学生中找到具有最佳和最差成绩(和打印)的学生,不确定语法在数组中的外观。

Main.java

import java.util.*; import java.io.*; public class Main { private static int i=0; public static void main (String[] args) throws IOException { Student[] arrStudents = new Student[7]; Scanner fileInput = new Scanner(new File("students.txt")); while (fileInput.hasNext()) { String firstName = fileInput.next(); String lastName = fileInput.next(); int grade = fileInput.nextInt(); arrStudents[i] = new Student(firstName, lastName, grade); i++; } getExcellentStudents(arrStudents); getOKStudents(arrStudents); getFailStudents(arrStudents); System.out.println(); System.out.println("Total Number of Students: " + arrStudents.length); } public static void getExcellentStudents(Student[] arrStudents) throws IOException { System.out.println("Excellent Students: "); for(int i = 0; i  89) { System.out.println(arrStudents[i]); } } System.out.println(); } public static void getOKStudents(Student[] arrStudents) throws IOException { System.out.println("OK Students: "); for(int i = 0; i  60 && grade < 90) { System.out.println(arrStudents[i]); } } System.out.println(); } public static void getFailStudents(Student[] arrStudents) throws IOException { System.out.println("Failure Students: "); for(int i = 0; i < arrStudents.length; i++) { int grade = arrStudents[i].getGrade(); if (grade < 61) { System.out.println(arrStudents[i]); } } System.out.println(); } 

Student.java

 public class Student { private String firstName, lastName; private int grade; public Student (String firstName, String lastName, int grade) { this.firstName = firstName; this.lastName = lastName; this.grade = grade; } public String toString() { return firstName + " " + lastName + " " + grade; } public int getGrade() { return grade; } } 

students.txt

 John Smith 90 Barack Obama 95 Al Clark 80 Sue Taylor 55 Ann Miller 75 George Bush 58 John Miller 65 

这是输出的外观(所以我现在错过了最后两行):

 Excellent Students: John Smith 90 Barack Obama 95 OK Students: Al Clark 80 Ann Miller 75 John Miller 65 Failure Students: Sue Taylor 55 George Bush 58 Total Number of Students: 7 Student With Highest Grade: Barack Obama 95 Student With Lowest Grade: Sue Taylor 55 

这里编辑比在评论中发布更容易。 我更新了post,让我更清楚一点,我在问什么。

这是我到目前为止找到最大值的内容,但我仍然对确切的内容感到困惑。

 public void outputMaxMin(Student[] arrStudents) throws IOException { Student bestStudent; Student worstStudent; student = new Student(); for (int i = 0; i  bestStudent.grade){ bestStudent = student; } if (grade < worstStudent.grade){ worstStudent = student; } } } 

以下怎么样:

 // assume students.length > 0 static void printMinMax(Student[] students) { Student min = students[0]; Student max = students[0]; for (Student student: students) { if (student.getGrade() > max.getGrade()) max = student; if (student.getGrade() < min.getGrade()) min = student; } System.out.println("Best student: " + max); System.out.println("Worst student: "+ min); } 

另外请注意,您应该考虑使用Collections而不是plain数组。 特别是因为你事先并不真正了解学生人数。

上面的代码可以像这样重写:

 static void printMinMax(List students) { Comparator comparator = new Comparator<>() { @Override public int compare(Student s1, Student s2) { return s1.getGrade() - s2.getGrade(); } }; Student max = Collections.max(students, comparator); Student min = Collections.min(students, comparator); // print stuff } 

或者使用java 8 lambdas更短:

 static void printMinMax(List students) { Comparator comparator = (s1, s2) -> s1.getGrade() - s2.getGrade(); Student max = Collections.max(students, comparator); Student min = Collections.min(students, comparator); // print stuff } 

要获得最高和最低等级,只需循环遍历数组中的所有项目,同时保留最高和最低的2个变量。

 int highest = 0; int lowest = 100; Student high = arrStudents[0]; Student low = arrStudents[0]; for (int index = 0; index < arrStudents.length; index++) { if (arrStudents[index].getGrade() > highest) { highest = arrStudents[index].getGrade(); high = arrStudents[index]; } else if (arrStudents[index].getGrade() < lowest) { lowest = arrStudents[index].getGrade(); low = arrStudents[index]; } } System.out.println("Student with the highest grade: " + high); System.out.println("Student with the lowest grade: " + low); 

然后以您喜欢的方式打印出来。 希望这可以帮助。

你需要循环思考数组并保持max和min的值

 Student[] arrStudents = new Student[7]; Student max=arrStudents[0]; Student min=arrstudents[1]; for (int i=0; i < arrStudents.length(); i++){ if arrStudents[i].getGrade() >max.getGrade(){ max = arrStudents[i]; } else if arrStudents[i].getGrade()