首页 > 解决方案 > 异常后Java不打印

问题描述

我正在学习Java,现在我需要打印数组打印异常消息。但是当我运行代码时,他在第一个异常消息(a [1])处停止并在没有完成数组的情况下关闭程序,我做错了什么?

他应该给我看:a0 + error + a2 + error + a4 但他在给我看:a0 + error

这是我的第一堂课:

package media;

public class aluno {
    
    private String nome;
    private double nota1, nota2;
    private double media;
    
    public aluno(String n, double n1, double n2) {
        this.nome = n;
        this.nota1 = n1;
        this.nota2 = n2;
    }
public double calcularMedia() {
        if (nota1 > 10 || nota2 > 10) {
              throw new ArithmeticException("Médias e notas não podem passar de 10!");
            }
           
        else if(nota1 < 0 || nota2 < 0) {
            throw new ArithmeticException("Médias e notas devem se manter entre 0 e 10!");
        }
         else {
              media = (this.nota1 + this.nota2) / 2; 
         }
        return media;
    }
    
    public String toString() {
        return "Aluno: " + nome + " Media: " + calcularMedia();
    }

}

这是我的主要内容:

package media;

public class program {

    public static void main(String[] args) {
        aluno a[] = new aluno[5];
        a[0] = new aluno("Guilherme", 8, 9);
        a[1] = new aluno("Leonardo", 16, 2);
        a[2] = new aluno("Beatriz", 6, 10);
        a[3] = new aluno("Karina", -2, -5);
        a[4] = new aluno("Gustavo", 3, 8);
        
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i].toString());
        }
    }
}

标签: javaarraysexception

解决方案


您应该在 for 循环中添加一个 try-catch 块。main 方法将被停止,因为第一个元素抛出未处理的异常。

for (int i = 0; i < a.length; i++) {
            try{
                System.out.println(a[i].toString());
            }
            catch(ArithmeticException ex){
                System.err.println(ex.getMessage());
            }
        }

这样,将为数组的每个元素处理 ArithmeticException。

另外,类名以大写字母开头,所以用 Aluno 代替 aluno。

抛出异常也会返回您的函数,因此您也可以简化代码。不需要其他情况。它增加了代码的可读性。这种 if 条件称为保护语句。

public double calcularMedia() {
        if (nota1 > 10 || nota2 > 10) {
              throw new ArithmeticException("Médias e notas não podem passar de 10!");
        }
        if(nota1 < 0 || nota2 < 0) {
            throw new ArithmeticException("Médias e notas devem se manter entre 0 e 10!");
        }
        return (this.nota1 + this.nota2) / 2; 
    }

推荐阅读