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 :

Arrays.binarySearch ne trouve pas mon B


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut Arrays.binarySearch ne trouve pas mon B
    Bonjour,

    J'ai un comportement qui me semble un peu étrange, mais peut être est-il normal, si vous pensez que oui, merci de m'éclairer sur ce phénomène.

    J'ai le code suivant :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import java.util.Arrays;
     
    public class Image {
     
    	public static void main(String[] args) {
    		String[] screen = new String[] {"DCBA"};
    		String dithered = "ACBD";
     
    		Image id = new Image();
    		System.out.println(id.count(dithered, screen));
    	}
     
    	public int count(String dithered, String[] screen) {
    		int result = 0;
    		int dithSize = dithered.length();
    		char[] ditheredChar = new char[dithSize];
    		for (int i = 0; i < dithSize; i++) {
    			ditheredChar[i] = dithered.charAt(i);
    		}
     
    		for (String line : screen) {
    			int screenSize = line.length();
     
    			for (int i = 0; i < screenSize; i++) {
    				char letter = line.charAt(i);
    				int toto = Arrays.binarySearch(ditheredChar, letter);
    //Pour B toto affiche -2 alors que B est bien présent dans ma liste
    				if (toto >= 0) {
    					result++;
    				}
    			}
    		}
     
    		return result;
    	}
    }

    Le programme devrai afficher en résultat 4 et il affiche 3 le problème se situe à la ligne commentée (~27).
    En faisant le débug j'ai bien la lettre B qui apparaît dans mon tableau "ditheredChar" mais toto prends la valeur -2 au lieu de 2 et en regardant dans la javadoc ici http://docs.oracle.com/javase/6/docs...arySearch(char[],%20char)

    Note that this guarantees that the return value will be >= 0 if and only if the key is found.
    Ce que je ne comprends pas c'est que la lettre B est bien présente et pour les trois autres le résultat de toto est correcte.

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Arrays.binarySearch cherche dans une liste triée. Hors la liste que tu lui passe n'est pas triée.

    Voilà ton code corrrigé:

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import java.util.Arrays;
     
    public class Image {
     
    	public static void main(String[] args) {
    		String[] screen = new String[] {"DCBA"};
    		String dithered = "ACBD";
     
    		Image id = new Image();
    		System.out.println(id.count(dithered, screen));
    	}
     
    	public int count(String dithered, String[] screen) {
    		int result = 0;
    		int dithSize = dithered.length();
    		char[] ditheredChar = dithered.toCharArray();
                          Arrays.sort(ditheredChar);
     
    		for (String line : screen) {
    			int screenSize = line.length();
                                     char[] lineChars = line.toCharArray();
    			for (char letter : lineChar) {
    				int toto = Arrays.binarySearch(ditheredChar, letter);
    //Pour B toto affiche -2 alors que B est bien présent dans ma liste
    				if (toto >= 0) {
    					result++;
    				}
    			}
    		}
     
    		return result;
    	}
    }

Discussions similaires

  1. Ma page web ne trouve pas mon applet
    Par kaygee dans le forum Applets
    Réponses: 14
    Dernier message: 29/07/2009, 14h27
  2. [Galerie] PHP : je ne trouve pas mon bonheur
    Par Strix dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 14/04/2008, 12h10
  3. Réponses: 6
    Dernier message: 14/12/2006, 00h37
  4. Mon appli trouve pas mon repertoire
    Par laclac dans le forum Langage
    Réponses: 2
    Dernier message: 07/12/2006, 15h07
  5. [debutant] tomcat trouve pas mon servlet
    Par zerovolt dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 28/08/2004, 15h18

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