Autore Topic: Recupero dato più vicino  (Letto 900 volte)

Offline angelo1977

  • Utente junior
  • **
  • Post: 59
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexsus
  • Sistema operativo:
    window 7 e ubuntu
Recupero dato più vicino
« il: 02 Febbraio 2014, 15:03:36 CET »
0
Ciao e buon di,non so se esite gia una classe ke faccia ciò mi serve ke qualcuno mi indirizzi almeno dove orientarmi
ho una linkedlist con i sequenti numeri 22,25,28,30,32,36,38 gli stessi salvati in un database mi serve ke se io ad esempio ho un valore 31 lu mi restituisca dalla lista il numero più vicino a questo valore quindi 30

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Recupero dato più vicino
« Risposta #1 il: 02 Febbraio 2014, 15:41:12 CET »
0
Sono ordinati o casuali?

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Recupero dato più vicino
« Risposta #2 il: 02 Febbraio 2014, 23:37:13 CET »
0
Se i numeri sono in ordine casuale questo è il modo più semplice di farlo.
Codice (Java): [Seleziona]
public Integer find (LinkedList<Integer> list, Integer n) {
        Integer diff = null;
        Integer near = null;
        for (Integer i : list) {
            if (diff == null || Math.abs(i-n)<diff) {
                diff = Math.abs(i-n);
                near = i;
            }
        }
        return near;
    }

Offline angelo1977

  • Utente junior
  • **
  • Post: 59
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexsus
  • Sistema operativo:
    window 7 e ubuntu
Re:Recupero dato più vicino
« Risposta #3 il: 06 Febbraio 2014, 11:01:43 CET »
0
la lista è ordinata in modo crescente,oggi provo se ho due minuti grazie a tutti

Offline ciccio

  • Utente junior
  • **
  • Post: 65
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Francesco Cervone
  • Sistema operativo:
    Mac OS X 10.9
Re:Recupero dato più vicino
« Risposta #4 il: 06 Febbraio 2014, 13:38:31 CET »
0
Dato che è ordinato ti conviene usare:
Codice (Java): [Seleziona]
Collections.binarySearch(list, numero);Che ti ritorna l'indice dell'elemento se è presente nella lista. Altrimenti ti ritorna:
(-1) * (indice della posizione in cui andrebbe inserito l'elemento) - 1
Che potrebbe essere utilizzato per capire il punto più vicino.
Per esempio se hai una lista fatta cosi -> [1,2,6,7,8], la chiamata Collections.binarySearch(list, 3) ti ritornerà -3. Ti basta aggiungere 1 (e quindi ottieni -2), moltiplicare per -1 (ottenendo 2), e confronti la posizione ottenuta (2) con la posizione ottenuta - 1 (ovvero 1). A quel punto prendi quello con la differenza minima.
Stai attento a non uscire fuori dall'array però.

Offline angelo1977

  • Utente junior
  • **
  • Post: 59
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexsus
  • Sistema operativo:
    window 7 e ubuntu
Re:Recupero dato più vicino
« Risposta #5 il: 11 Febbraio 2014, 21:08:34 CET »
0
Dato che è ordinato ti conviene usare:
Codice (Java): [Seleziona]
Collections.binarySearch(list, numero);Che ti ritorna l'indice dell'elemento se è presente nella lista. Altrimenti ti ritorna:
(-1) * (indice della posizione in cui andrebbe inserito l'elemento) - 1
Che potrebbe essere utilizzato per capire il punto più vicino.
Per esempio se hai una lista fatta cosi -> [1,2,6,7,8], la chiamata Collections.binarySearch(list, 3) ti ritornerà -3. Ti basta aggiungere 1 (e quindi ottieni -2), moltiplicare per -1 (ottenendo 2), e confronti la posizione ottenuta (2) con la posizione ottenuta - 1 (ovvero 1). A quel punto prendi quello con la differenza minima.
Stai attento a non uscire fuori dall'array però.

grazie ciccio,il metodo ke mi ai dato funziona benissimo provo anke questo,sperimentarneper me alle prime armi non puo fare altro ke farmi bene

Offline angelo1977

  • Utente junior
  • **
  • Post: 59
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    galaxy nexsus
  • Sistema operativo:
    window 7 e ubuntu
Re:Recupero dato più vicino
« Risposta #6 il: 13 Febbraio 2014, 19:55:42 CET »
0
Dato che è ordinato ti conviene usare:
Codice (Java): [Seleziona]
Collections.binarySearch(list, numero);Che ti ritorna l'indice dell'elemento se è presente nella lista. Altrimenti ti ritorna:
(-1) * (indice della posizione in cui andrebbe inserito l'elemento) - 1
Che potrebbe essere utilizzato per capire il punto più vicino.
Per esempio se hai una lista fatta cosi -> [1,2,6,7,8], la chiamata Collections.binarySearch(list, 3) ti ritornerà -3. Ti basta aggiungere 1 (e quindi ottieni -2), moltiplicare per -1 (ottenendo 2), e confronti la posizione ottenuta (2) con la posizione ottenuta - 1 (ovvero 1). A quel punto prendi quello con la differenza minima.
Stai attento a non uscire fuori dall'array però.

non so come implementare il resto,il metodo mi restitusce la posizione che occupa il numero,se il numero è nella lista mi da la posizione esatta è dovrei richiamarla per avere il numero,al contrario dovrei richiamare due posizioni i numeri contenuti è confrontarle col numero che sto cercando ,confused
ribadisco ke sono nabbo alla mia prima esperienza in programmazione