Trie Dichotomique output erreur

Résolu
domxaline -  
 domxaline -
Bonjour,
j'écris ce programme de trie Dichotomique,

pendant l’exécution de celle ci, j'ai une erreur output

il s'affiche que "élément non trouvé"

même élément se trouve dans cette tableau, veuillez m'aidez svp

voilà mon programme:
import java.util.Scanner;
public class RechDicoTab1
{
    public static void main(String[] args)
    {
        int[]tab={4,5,6,7,8,9,10,11};
        System.out.println("Entrez élément à trouver");
        Scanner sc=new Scanner(System.in);
         
        int result=Test(sc.nextInt());
        if(result!=-1)
        {
            System.out.println("élément trouvé"+result);
        }
        else
        {
            System.out.println("élément non trouvé");
        }
 
    }
    public static int Test(int result1)
    {
        int[]tab={4,5,6,7,8,9,10,11};
        int a=1;
        int b=tab.length;
        int p=0;
        int i=0;
        boolean result=false;
        boolean recherche=false;
        int position =-1;
        do
        {
            p=((a+b)/2);
            if(result1==tab[p])
            {
                result=true;
                //System.out.println("élément trouvé");
                position=i;
            }
            else
            {
                if(result1>tab[p])
                {
                    a=p+1;
                }
                else
                {
                    if(result1<tab[p])
                    {
                        b=p-1;
                    }
                }
            }
             
        }while(result==true || (a>b));
         
        return position;
         
    }
 
}


5 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    C'est compliqué tout ça...
    Je m'étonnes toujours de te voir à ce même niveau depuis maintenant 7 ans que tu viens régulièrement poster des questions Java sur ce forum !

    private static int binarySearch(int[] array, int fromIndex, int toIndex, int key) {
        int low = fromIndex;
        int high = toIndex - 1;
        while (low <= high) {
            int mid = (low + high) / 2;
            int midVal = array[mid];
            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid;
        }
        return -1;
    }
    
    private static int binarySearch(int[] array, int key) {
        return binarySearch(array, 0, array.length, key);
    }
    
    public static void main(String[] args) {
        int[] tab = { 1, 3, 5, 7, 9 };
        System.out.println(binarySearch(tab, 0)); // -1: before the first
        System.out.println(binarySearch(tab, 1)); //  0: the first
        System.out.println(binarySearch(tab, 4)); // -1: not in middle
        System.out.println(binarySearch(tab, 5)); //  2: in middle
        System.out.println(binarySearch(tab, 9)); //  4: the last
        System.out.println(binarySearch(tab,10)); // -1: after the last
    }
    0
  2. domxaline
     
    merci pour votre aide
    "Je m'étonnes toujours de te voir à ce même niveau depuis maintenant 7 ans que tu viens régulièrement poster des questions Java sur ce forum ! "

    oui je suis depuis 7 ans
    j'ai aucune formation dans la programmation, ni je ne travail pas de dans,
    je travail dans la sécurité,
    je l'ai essaie que, quand j'ai un moment.
    je prend le cours dans l'internet,et aidé par la forum
    excusez moi pour ce lenteur
    0
  3. domxaline
     
    voilà j'ai corrigé mon programme, maintenant il marche
    import java.util.Scanner;
    public class RechDicoTab1 
    {
    	public static void main(String[] args) 
    	{
    		int[]tab={4,5,6,7,8,9,10,11};
    		System.out.println("Entrez élément à trouver");
    		Scanner sc=new Scanner(System.in);
    		int x=sc.nextInt();
    		recherche(tab,x);
    		int position=recherche(tab,x);
    		
    		if(position>0)
    		{
    			System.out.println("L'élément "+x+" est trouvé en position "+position);
    		}
    		else
    		{
    			System.out.println("L'élément "+x+" n'est pas trouvé");
    		}
    	}
    
    	private static int recherche(int[] tab, int elt) 
    	{
    		int n=tab.length-1;
    		int a=1;
    		int b=n;
    		int p=0;
    		int position=-1;
    		do
    		  {
    			p=((a+b)/2);
    			if(elt==tab[p])
    			{
    				position=p;
    			}
    			else if(tab[p]<elt)
    				{
    					a=p+1;
    				}
    			else 
    				{
    						b=p-1;
    				}
    		    }while(elt!=tab[p] && (a<=b));
    		return position;
    	}			
    }
    
    0
  4. domxaline
     
    j'ai une question à vous poser

    dans mon output,quand je demande chercher 0 élément, veut dire dans le tableau tab[0]4

    dans l'output il me retourne

    Entrez élément à trouver:
    4

    L'élément 4 n'est pas trouvé

    pourtant 4 se trouve dans cette tableau, quelqu'un peut m'aider s'il vous plait
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. domxaline
     
    ok j'ai trouvé mon erreur, ils sont trouvé dans les lignes suivante:

    ligne 15 if(position>0) j'ai corrigé comme ceci if(position>-1

    ensuite dans la

    ligne 33 int a=1; je l'ai corrigé int a=0;

    merci beaucoup
    0