Java-présence d'un nom dans un tableau

Bonjour,
but de mon programe est:
Ecrire un programme qui demande à l' utilisateur d' entrer un caractère. Puis le programme affiche tous les noms pré-enregistrés dans le system et commençant par ce caractère. On ne tient pas compte de la casse du caractère (majuscule ou minuscule).
j'ai ecris mon programme ainsi:

import java.util.Scanner;
public class essaie
{
public static void main (String [] args)
  {
	String[]tab={"Simon","Chris","David","Sarko","Sego","Hardy","Patrick","Franck","Samir"};
    System.out.print("Entrez un nom:");
    Scanner sc=new Scanner(System.in);
    String c=sc.nextLine();
    System.out.println("la liste des noms commençant par "+ c + " est:");
    for(int i=0;i<tab.length;i++)
    {
    	if(tab[i].charAt(i)=='s'||tab[i].charAt(i)=='S')
    		System.out.println(tab[i]);
    }  
 }
}


je l'ai compilé et exécuté
le resultat n'est pas bon, quelqu'un peut m'aider

Entrez un nom:D
la liste des noms commençant par D est:
Simon
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(Unknown Source)
at essaie.main(essaie.java:14)

Entrez un nom:c
la liste des noms commençant par c est:
Simon
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4
at java.lang.String.charAt(Unknown Source)
at essaie.main(essaie.java:14)
Configuration: Windows XP Internet Explorer 6.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. en corrigeant la ligne suivant
    String[]tab={"Simon","Chris","David","Sarko","Sego","Hardy","Patrick","Franck","Samir"};

    comme ceci:
    String[]tab={"Simon","Chris","David","Sarko","Sego"};

    prg marche mais resultat est faux

    Entrez un nom:D
    la liste des noms commençant par D est:
    Simon

    Entrez un nom:C
    la liste des noms commençant par C est:
    Simon

    Entrez un nom:s
    la liste des noms commençant par s est:
    Simon
    1. salut,
      essayer de remplacer l'instruction suivante :
      if(tab[i].charAt(i)=='s'||tab[i].charAt(i)=='S')
      System.out.println(tab[i]);

      par celle ci:

      if(tab[i].charAt(0)==toUpperCase(c) || tab[i].charAt(0)==toLowerCase(c))
      System.out.println(tab[i]);
      1. Salut,

         public static void main (String [] args)
              {
                 String[]tab={"Simon","Chris","David","Sarko","Sego","Hardy","Patrick","Franck","Samir"};
                 System.out.print("Entrez un nom:");
                 Scanner sc=new Scanner(System.in);
                 String c=sc.nextLine();
                 c = c.toUpperCase(); // ajouter
                 System.out.println("la liste des noms commençant par "+ c + " est:");
                 for(int i=0;i<tab.length;i++)
                 {
                    //if(tab[i].charAt(i)=='s'||tab[i].charAt(i)=='S')
                    if(tab[i].startsWith(c))
                       System.out.println(tab[i]);
                 }  
              }


        Cordialement,

        Dan
        1. Re,

          On peut aussi gérer le cas sans noms trouvés:

           public static void main (String [] args)
                {
                   String[]tab={"Simon","Chris","David","Sarko","Sego","Hardy","Patrick","Franck","Samir"};
                   System.out.print("Entrez un nom:");
                   Scanner sc=new Scanner(System.in);
                   String c=sc.nextLine();
                   c = c.toUpperCase(); // ajouter
                   boolean pasDeNom = false; // ajouter
                   //System.out.println("la liste des noms commençant par "+ c + " est:");
                   for(int i=0;i<tab.length;i++)
                   {
                      //if(tab[i].charAt(i)=='s'||tab[i].charAt(i)=='S')
                      if(tab[i].startsWith(c))
                      {  // ajouter
                      // ajouter les 2 lignes qui suivent
                         if (pasDeNom == false)
                            System.out.println("la liste des noms qui commencent par "+ c + " est:");
                            
                         System.out.println(tab[i]);
                         pasDeNom = true;  // ajouter
                      }  //ajouter
                   }
                   // ajouter
                   if (pasDeNom == false)
                      System.out.println("Il n'y a pas de noms qui commencent par " + c);	
                }