Expliquez les sorties des instructions java suivantes : table.printindex1(5), table.printindex2(5), table.printindex3(5) :
public class Tableau {
private int[] tab;
public Tableau(int length) {
tab = new int[length];
}
public static void main(String[] args) throws IndexTabException {
Tableau tableau = new Tableau(5);
tableau.printIndex1(5);
tableau.printIndex2(5);
tableau.printIndex3(5);
}
void printIndex1(int i) {
try {
System.out.println(tab[i]);
} catch (IndexOutOfBoundsException e) {
System.out.println("Index invalide");
}
}
void printIndex2(int i) {
try {
if (i < 0 || i >= tab.length) {
throw new IndexOutOfBoundsException();
}
System.out.println(tab[i]);
} catch (IndexOutOfBoundsException e) {
System.out.println("Index invalide");
}
}
void printIndex3(int i) throws IndexTabException {
if (i < 0 || i >= tab.length) {
throw new IndexTabException("Index invalide");
}
System.out.println(tab[i]);
}
}
class IndexTabException extends Exception {
public IndexTabException(String s) {
super(s);
}
}
Pour comprendre les sorties des instructions table.printIndex1(5), table.printIndex2(5), et table.printIndex3(5), examinons chaque méthode séparément.
table.printIndex1(5) :
La méthode printIndex1 essaie d'accéder à l'élément tab[5].
Cependant, la taille du tableau est de 5 (Tableau tableau = new Tableau(5)), donc le dernier index valide est tab[4].
En conséquence, une IndexOutOfBoundsException sera déclenchée, et le bloc catch sera exécuté, affichant "Index invalide".
table.printIndex2(5) :
La méthode printIndex2 vérifie d'abord si l'index i est dans la plage valide.
Comme i est égal à 5 et la taille du tableau est de 5, la condition i >= tab.length est vraie.
Par conséquent, la méthode lance une IndexOutOfBoundsException, et le bloc catch est exécuté, affichant "Index invalide".
table.printIndex3(5) :
La méthode printIndex3 lance directement une IndexTabException si l'index i est en dehors de la plage valide.
Comme i est égal à 5 et la taille du tableau est de 5, une IndexTabException sera déclenchée, affichant "Index invalide".