IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

présence d'un nom dans un tableau


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut 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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    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
    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)

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(tab[i].charAt(i)=='s'||tab[i].charAt(i)=='S')
        		System.out.println(tab[i]);
    Comment tu veux que ça marche si tu hardcode le caractère s ?

    Il faut que tu utilises le caractère entrés par l'utilisateur (variable c) et voir si ça commence par ce caractère.

  3. #3
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Quand tu fais ça, tu prend le i-ème caractère du i-ème nom. Je suppose que tu voudrais plutôt écrire :

    EDIT: plus le hardcoding signalé ci-dessus ^^

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    En corrigeant la ligne suivant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[]tab={"Simon","Chris","David","Sarko","Sego","Hardy","Patrick","Franck","Samir"};
    comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String[]tab={"Simon","Chris","David","Sarko","Sego"};
    prg marche, mais resultat est faux

    Entrez un nom
    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

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Par ailleurs, pourquoi passer par des char alors que tu as la belle fonction startsWith de la classe String ?

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    j'ai corrigé comme tu m'a indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {
        	if(tab[i].charAt(i)=='c'||tab[i].charAt(i)=='C')
        		System.out.println(tab[i]);
        }
    Resultat:
    Entrez un nom:C
    la liste des noms commençant par C est:

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

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mars 2004
    Messages : 104
    Par défaut
    ne mets pas la valeur 'c' mais la variable c. En plus cette variable est une String, tu auras du mal à la comparer avec un caractère. Essaie plutôt la méthode startsWith()

  8. #8
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     for(int i=0;i<tab.length;i++)
        {
        	if(tab[i].startsWith(c)||tab[i].startsWith(C))
        		System.out.println(tab[i]);
        }
    resultat
    Entrez un nom:c
    la liste des noms commençant par c est:
    Exception in thread "main" java.lang.NullPointerException
    at java.lang.String.startsWith(Unknown Source)
    at java.lang.String.startsWith(Unknown Source)
    at essaie.main(essaie.java:16)

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Citation Envoyé par domxaline Voir le message
    j'ai corrigé comme tu m'a indiqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(tab[i].charAt(i)=='c'||tab[i].charAt(i)=='C')
    Ce n'est pas la première fois que tu postes pour des questions basiques, et à chaque fois tes réactions me laissent perplexes

    Est-ce que tu lis les réponses qui te sont données ?
    - Baptiste Wicht avait bien dit "le caractère entré par l'utilisateur (variable c)", je ne vois pas comment tu transformes ça en "le caractère 'c'"
    - tu n'as toujours pas corrigé l'erreur signalée par Rei Ichido (comparaison avec le i-ième caractère au lieu du 0-ième)

    Est-ce que tu fais le moindre effort pour comprendre ce que tu fais ?
    - la comparaison en dur avec le caractère 's' était quand même une erreur grossière, tu aurais du te frapper le front en criant "mais oui mais c'est bien sûr" à partir du moment où on t'avait mis le nez dessus, mais non, tu "corriges" ça tranquillement avec une comparaison avec le caractère 'c' sans que ça paraisse te déranger... franchement, rassure-moi, c'est une blague ?

    C'est bien beau de venir faire corriger tes exercices sur le forum en répétant les mêmes questions jusqu'à ce qu'une bonne âme accepte de pondre du code pour toi, mais est-ce que tu te rends compte que pour toi c'est complètement inutile ? Peut-être que tu auras une note correcte à ton DM, mais tu ne progresseras jamais si tu ne commences pas par mettre ton cerveau en marche...

    C'était le coup de gueule du jour Pour ta question, bah, les autres ont tout dit, si tu fais l'effort de relire et de comprendre, tu pourras corriger ton code tout seul comme un grand.
    Ah, si, quand même une astuce : pour une comparaison de String qui ne tient pas compte de la casse, il y a equalsIgnoreCase, mais malheureusement il n'y a pas de méthode similaire pour startsWith ; tu peux toutefois jouer avec toUpperCase pour contourner les problèmes de casse.



    Citation Envoyé par domxaline Voir le message
    ...
    Si tu veux des explications sur ton code modifié, commence par nous donner les modifications : en particulier, que représente C ?

  10. #10
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Ca compile avec ton C majuscule ? Où est-il défini ?
    Par ailleurs je t'encourage à vérifier la non nullité de tes objets avant d'appliquer des méthodes dessus, ça t'évitera des NullPointerException

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/11/2010, 09h23
  2. [XSLT] Prénom associé au nom dans un tableau
    Par thierryler dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/09/2010, 14h12
  3. plusieurs noms dans un tableau
    Par larreira dans le forum Débuter
    Réponses: 13
    Dernier message: 27/12/2008, 21h33
  4. Lier une image selon son nom dans un tableau
    Par Kara dans le forum Word
    Réponses: 17
    Dernier message: 05/12/2008, 12h04
  5. VBA-E Recherche des différents noms dans mon tableau excel
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/04/2007, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo