Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327

    [JAVA] manipolazione array

    Salve,
    ho un array di byte e vorrei poter aggiungere un nuovo byte all'inizio di questo array e un altro alla fine, è possibile farlo attraverso un metodo esistente??

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    No.
    Innanzitutto bisogna capire esattamente cosa intendi per "aggiungere" un byte all'inizio e uno alla fine.

    Se intendi "sostituire" il contenuto del primo e ultimo byte dell'array sono due istruzioni di assegnazione.

    Se intendi modificare la dimensione dell'array facendola diventare più grande di due unità, è un procedimento che richiede una allocazione di un nuovo array più grande.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    allora faccio un esempio breve, il mio byte array ha una capienza di 20 byte, di cui soltanto 12 sono stati occupati. Adesso vorrei poter aggiungere un nuovo byte all'inizio ed uno alla fine

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ok, ho capito cosa intendi.
    Faccio una premessa: se il tuo array di byte è di dimensione 20, allora contiene 20 byte. Non importa che tu "consideri" solo i primi 12... i restanti sono tutti occupati dal byte 0. Questo perchè l'array è un oggetto contenente 20 valori primitivi e i valori primitivi hanno sempre un valore (quello di default, almeno).

    codice:
    byte[] mioArray = new byte[20];
    Questa operazione crea un array di 20 byte... tutti inizializzati a 0.


    Detto questo, immagino che quello che tu vuoi ottenere sia un array in cui considerare le prime 14 posizioni, dove la prima e l'ultima sono quelle nuove.

    Le operazioni da compiere sono queste:

    1) Shift di tutti i valori presenti di una posizione in avanti (un banalissimo ciclo for)
    2) Aggiunta del nuovo valore in posizione 0
    3) Aggiunta del nuovo valore in posizione 13

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    grazie mille!!

    ascolta sto provando l'Arrays.binarySearch

    esempio
    byte Arr[] = { 68, 21, 66, 22, 23, 30, 31, 32, 33 };

    byte searchValue = 68;

    int index = Arrays.binarySearch(Arr, searchValue);

    non capisco però perchè se cerco il 68 l'indice che mi restituisce è -9 e non 0, oppure se cerco il 22 mi da -3 come indice e non 3.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La documentazione dice espressamente:
    The array must be sorted
    Ovvero, l'array deve essere ordinato... del resto, l'algoritmo di ricerca binaria funziona solo se l'array è ordinato... se non lo è, l'unico modo per effettuare una ricerca è scorrere tutto l'array finchè non si trova l'elemento cercato o si raggiunge la fine dell'array...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    La spiegazione è chiarissima, basta consultare le API Arrays.binarySearch().

    Se l'array NON è ordinato la funzione restituisce la posizione che l'elemento occuperebbe nel caso in cui l'array fosse ordinato.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    ho capito, però a me non serve ordinare l'array di byte. Io ottengo un array di byte da una fonte e devo semplicemente controllare se due byte sono nella posizione che a me interessa, se li ordino perdo la posizione.

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da hackerdm
    ho capito, però a me non serve ordinare l'array di byte. Io ottengo un array di byte da una fonte e devo semplicemente controllare se due byte sono nella posizione che a me interessa, se li ordino perdo la posizione.
    Ergo, la binarySearch() non ti serve a nulla.
    E non vedo nemmeno perchè scomodare la binarySearch() quando ciò che ti basta è una if...

    codice:
    if ((tuoArray[posizione_che_ti_interessa] == valore_che_ti_interessa) && (tuoArray[altraPosizione] == altro_valore)) {
       ...
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    327
    e se invece non conoscessi la posizione di un byte??

    allora io ho uno stream di byte, l'intero stream è suddiviso in sezioni e devo andare a leggere il contenuto di ogni sezione es:

    SOH - Inizio pacchetto
    HEAD - Inizio Header
    STX - Separa header dal messaggio
    MSG - messaggio
    ETX - Separa il messaggio dal body
    BODY - Body
    EOT - Termina il pacchetto

    allora la prima parte di questo pacchetto, vale a dire SOH, HEAD e STX, hanno sempre la stessa posizione, cioè sono io a decidere quanti byte andranno ad occupare, e dove andarli a trovare (da xx a xx byte). Per quanto riguarda MSG, so dove inizia ma non so dove finisce, l'ETX e BODY non so nemmeno dove iniziano o finiscono, allora io avevo pensato o andarmi a cercare le posizioni di questi byte oppure fare un ciclo for e andarmi a trovare ciò che cerco. il problema è che il messaggio e il body possono essere abbastanza lunghi alle volte e non so se un ciclo for sia la soluzione giusta.

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.