Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Membre chevronné Avatar de grabriel
    Inscrit en
    septembre 2006
    Messages
    936
    Détails du profil
    Informations forums :
    Inscription : septembre 2006
    Messages : 936
    Points : 617
    Points
    617

    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 :
    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 Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    21 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 21 188
    Points : 34 858
    Points
    34 858

    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 :
    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;
    	}
    }
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •