Partage
  • Partager sur Facebook
  • Partager sur Twitter

IndexOutOfBoundsException/InputMismatchException

    13 juillet 2019 à 3:17:35

    Bonsoir à toutes et à tous,

    Etant débutant en JAVA, je me permets de vous partager un code assez simple afin que vous puissiez éclairer une zone d'ombre. 

    Description de mon code :

    Je décide de créer un ArrayList de type String en y ajoutant "A", "B", "C", "D". Le code affiche l'indice de l'ArrayList entré au clavier.

    Mes souhaits :

    • Je souhaiterais ajouter une boucle (do while) permettant à son utilisateur de :  Tant que indice != 0, 1, 2, 3, il demande à son utilisateur d'entrer une valeur qui correspond aux indices de l'ArrayList (afin d'éviter le IndexOutOfBoundsException)
    • Je souhaiterais ajouter une ligne de code permettant d'éviter d'entrer un String (au lieu d'un Int) et ainsi obtenir l'exception : InputMismatchException. Le programme demanderai à nouveau d'entrer une nouvelle donnée.
    • Enfin, je souhaiterais ajouter une ligne de code permettant : Si l'indice est null (cliquer trop vite sur Enter, le programme ne génère plus une erreur) et demande à son utilisateur d'entrer une nouvelle donnée.
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class arrayList {
    
    	public static void main(String[] args) {
    
    		Scanner clavier = new Scanner(System.in);
    
    		ArrayList<String> Data = new ArrayList<String>();
    
    		int indice = 0;
    
    		Data.add("A"); // indice 0
    		Data.add("B"); // indice 1
    		Data.add("C"); // indice 2
    		Data.add("D"); // indice 3
    
    		System.out.print("Choississez l'indice à afficher [0/1/2/3] : ");
    		indice = clavier.nextInt() - 1;
    		System.out.println(Data.get(indice)); 
    
    		System.out.println("Fini !");
    
    	}
    }



    Serait-il possible de m'aider car je bloque sur cela depuis quelques heures ...

    Un tout grand merci à vous tous.

    Et bonne soirée !

    -
    Edité par Rsklol 13 juillet 2019 à 3:20:16

    • Partager sur Facebook
    • Partager sur Twitter
      13 juillet 2019 à 9:09:08

      Par convention en Java, les noms des variables commencent toujours par une minuscule et les noms des classes par une majuscule.

      Rsklol a écrit:

      Je souhaiterais ajouter une boucle (do while) permettant à son utilisateur de :  Tant que indice != 0, 1, 2, 3, il demande à son utilisateur d'entrer une valeur qui correspond aux indices de l'ArrayList (afin d'éviter le IndexOutOfBoundsException).

      Fais une condition pour vérifier que indice >= 0 et indice < data.size()

      Rsklol a écrit:

      Je souhaiterais ajouter une ligne de code permettant d'éviter d'entrer un String (au lieu d'un Int) et ainsi obtenir l'exception : InputMismatchException. Le programme demanderai à nouveau d'entrer une nouvelle donnée.

      Scanner.nextInt() se charge tout seul de cette vérification et de la génération de l'exception.

      Actuellement, si cette exception survient, ton programme s'arrête. Il faut attraper l'exception pour éviter qu'il ne s'arrête et l'entourer d'une boucle infiniepour l'obliger à recommencer.

      Rsklol a écrit:

      Enfin, je souhaiterais ajouter une ligne de code permettant : Si l'indice est null (cliquer trop vite sur Enter, le programme ne génère plus une erreur) et demande à son utilisateur d'entrer une nouvelle donnée.

      Je n'ai pas testé la Scanner.nextInt() pour savoir ce qu'il renvoie dans ce cas-là, mais j'imagine que soit il lève une exception, soit il renvoie 0. On se ramène donc à un des deux cas précédents.

      En tout cas ça ne peut pas être null parce que nextInt() renvoie un type int. C'est un type primitif qui ne peut pas être null, contrairement à Integer.

      -
      Edité par Zachee54 13 juillet 2019 à 9:11:40

      • Partager sur Facebook
      • Partager sur Twitter
        13 juillet 2019 à 23:59:22

        J'essaye :)

        -
        Edité par Rsklol 14 juillet 2019 à 0:09:44

        • Partager sur Facebook
        • Partager sur Twitter

        IndexOutOfBoundsException/InputMismatchException

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown