Correction attendue :
// Classe représentant un animal
class Animal {
private String name;
private String species;
public Animal(String name, String species) {
this.name = name;
this.species = species;
}
public String getDetails() {
return "Nom: " + name + ", Espèce: " + species;
}
}
// Classe représentant le zoo
class Zoo {
private Animal[] animals;
private int count;
public Zoo(int capacity) {
animals = new Animal[capacity];
count = 0;
}
public void addAnimal(Animal animal) {
if (count < animals.length) {
animals[count++] = animal;
System.out.println("Ajouté : " + animal.getDetails());
} else {
System.out.println("Le zoo est plein !");
}
}
public Animal getAnimal(int index) {
try {
return animals[index];
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Index " + index + " est hors des limites du tableau.");
return null;
}
}
public void removeAnimal(int index) {
try {
System.out.println("Retiré : " + animals[index].getDetails());
animals[index] = null;
// Décalage des éléments pour combler l'espace vide
for (int i = index; i < count - 1; i++) {
animals[i] = animals[i + 1];
}
animals[--count] = null;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Index " + index + " est hors des limites du tableau.");
}
}
}
// Classe principale pour tester la gestion du zoo
public class ZooManager {
public static void main(String[] args) {
Zoo zoo = new Zoo(3);
Animal lion = new Animal("Lion", "Panthera leo");
Animal tiger = new Animal("Tigre", "Panthera tigris");
Animal elephant = new Animal("Éléphant", "Loxodonta");
zoo.addAnimal(lion);
zoo.addAnimal(tiger);
zoo.addAnimal(elephant);
// Essayer de récupérer des animaux avec des index valides et invalides
System.out.println(zoo.getAnimal(1).getDetails()); // Index valide
zoo.getAnimal(3);
}
}
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".