Java 如何在不处理异常的情况下防止被零除

Java 如何在不处理异常的情况下防止被零除,java,error-handling,Java,Error Handling,我有两个班:学生和大学 public class University { private String name; private List<Student> students; public University(String name) { this.name = name; this.students = new ArrayList<Student>(); } 因此,如果列表中没有学生,我会得到被零除的结果,我试图用try\catch

我有两个班:
学生
大学

public class University {

private String name;
private List<Student> students;

public University(String name) {    
    this.name = name;
    this.students = new ArrayList<Student>();
}
因此,如果列表中没有学生,我会得到被零除的结果,我试图用
try\catch
块来处理它。 我想知道是否有任何方法可以简化此检查,以避免出现
try-catch
块?当然,我可以这样实现它:

public double average() {
    double average = 0;

    for(Student st: students) {
        average += st.getKnowledge();
    }

    if (students.size() == 0) 
        throw new IllegalArgumentException("Oops, there is no student studying");

    return average/students.size();
}
或者

if (students.size() == 0) 
        System.out.println(""Oops, there is no student studying"");
或者检查它可能没有意义,因为如果
学生
列表为空,那么它就不会进入循环

我知道这个问题很简单,但我只是在研究,所以我想知道将来哪种方式更好。 也许还有一个隐藏的问题或什么?用boundaris值还是别的什么


提前感谢。

这就是为什么会有陈述。不要限制自己使用它们:)最好是在方法的开头检查。比如:

public double average() {
    if(students.isEmpty())
        return 0.0;

    double average = 0;

    for(Student st: students) {
        average += st.getKnowledge();
    }            
    return average/students.size();
}
如果你想用一种更奇特的方式来处理流,你可以:

private double average(List<Student> students) {
    return students.stream()
            .mapToDouble(Student::getKnowledge)
            .average()
            .orElse(0.0);
}
private双倍平均(列出学生){
return students.stream()
.mapToDouble(学生::getKnowledge)
.average()
.orElse(0.0);
}

另一个解决方案是使用摘要统计信息。 除平均值外,它还包含有关最小值、最大值、总值及其总和的信息。 如果您需要多个摘要值,但又不希望生成多个集合流,则广泛使用此选项:

public static double average() {
    return students.stream()
            .mapToDouble(Student::getKnowledge)
            .summaryStatistics()
            .getAverage();
}
如果集合为空,则默认情况下它将返回0.0


如果需要多个摘要值,则速度更快;如果只需要一个,则速度较慢。

使用条件语句。如果(除数!=0){//执行除法}//代码的其余部分
public static double average() {
    return students.stream()
            .mapToDouble(Student::getKnowledge)
            .summaryStatistics()
            .getAverage();
}