Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50

    [JAVA] Metodo per la ricerca binaria

    Ciao di nuovo a tutti, in questi giorni sto facendo davvero un uso spropositato di questo forum

    Veniamo al dunque. In una classe Banca, devo scrivere un metodo che mi ricerchi un determinato numero di conto (Es: 22345) attraverso la ricerca binaria e che mi dica se è stato trovato o meno. Prima però, devo verificare se i numeri di conto sono messi nell'array in ordine crescente. Quindi, se sono in ordine posso fare la ricerca, altrimenti devo visualizzare un messaggio che indichi che è impossibile effettuare l'operazione (quindi non devo ordinare l'array).

    Questo è quello che ho fatto:

    codice:
    //VERIFICA ORDINAMENTO PER NUM CONTO
    	private static Boolean verOrd(Banca1[]v)
    	{
    		Boolean ordinato =false;
    		if(v!=null){
    		ordinato= true;
    		for(int i=0;i<v.length-1;i++)
    		{
    			if(v[i].getNum()>v[i+1].getNum()) {ordinato= false;}
    		}
    		}
    		return (ordinato);
    		
    	}
    	
    	//RICERCA BINARIA 
    	public static Boolean Bsearch(int conto, Banca1[]v)
    	{
    		Boolean trovato = true;
    		if(v!=null){
    			trovato = false;
    			if (Banca.verOrd(v)==false){System.out.println("Operazione non eseguibile.");}
    			else 
    			{
    				int low=0;
    				int high=v.length-1;
    				while(low<=high)
    				{
    					int mid= (low+high)/2;
    					int diff= v[mid].getNum()-conto;
    					
    					if(diff==0) {trovato = true;}
    					else if(diff<0){low=mid+1;}
    					else high=mid-1;
    				}
    				trovato = false;
    			}
    		}
    		return (trovato);
    	
    	}

    E questo quello che scrivo poi nel tester:

    codice:
    System.out.println("Conto da cercare: ");
    				int conto = in.nextInt();
    				if(Banca.Bsearch(conto, clienti)==true)
    					System.out.println("TROVATO");
    				else System.out.println("non trovato");

    Quando immetto due codici non in ordine mi da il messaggio "Operazione non eseguibile.", quindi fin qui tutto ok. Quando poi immetto due codici in ordine, se digito un codice che dovrebbe non essere trovato, mi stampa ''non trovato'', il problema è quando digito un codice che dovrebbe essere trovato, perchè quando premo INVIO non succede nulla. Nella console va solo a capo, senza passare al prossimo case nonostante il break ci sia (sono all'interno di uno switch).


    Qualcuno potrebbe aiutarmi a capire dov'è l'errore??

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Appena trovi il conto, dovresti uscire dal ciclo while (magari direttamente con una return)...invece tu continui fino alla fine e dopo il ciclo rimetti la variabile a false

  3. #3
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Mi sono appena accorto che mi son mangiato una parte della risposta:

    Quando trovi il conto nel while, tu imposti solo la variabile trovato, ma low e high restano le stesse e visto che non esci dal while ti ritrovi in un loop infinito

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    Grazie mille per la risposta! Credo di aver capito cosa intendi. Adesso non sono a casa e non posso utilizzare Eclipse, quindi provo a modificarlo qui, secondo le tue direttive. Magari dimmi se va bene

    codice:
    //RICERCA BINARIA 
    	public static Boolean Bsearch(int conto, Banca1[]v)
    	{
    		if (Banca.verOrd(v)==false){System.out.println("Operazione non eseguibile.");}
    			else 
    			{
    				int low=0;
    				int high=v.length-1;
    				while(low<=high)
    				{
    					int mid= (low+high)/2;
    					int diff= v[mid].getNum()-conto;
    					
    					if(diff==0) return true;
    					else if(diff<0){low=mid+1;}
    					else high=mid-1;
    				}
    			}
                              return false;
    		}
    		
    	
    	}

  5. #5
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Così dovrebbe andare
    (Anche se c'è una parentesi graffa di troppo )

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    50
    Grazie mille, adesso funziona!! )

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.