Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Array...non array?

  1. #1

    Array...non array?

    Perchè js tratta il mio array come se non lo fosse?
    Vi spiego: ogni modifica che apporto ad un singolo elemento si riflette su tutti gli altri!
    L'ho istanziato così, cioè correttamente, almeno per quanto ne so:
    var temp=new Array();

    Ad esempio, se temp[0] lo pongo =1, anche temp[1],temp[2]...etc saranno = 1.
    Mai successa questa cosa, neanche in altri linguaggi...

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Forse è perché hai scritto un if con un operatore di assegnazione (=) invece che con uno di comparazione (== oppure ===). Manda il codice.

  3. #3
    Questo è il pezzo di codice che da' il problema. Di fatto io lavoro con un array bidimensionale (matr) e temp, che è un array di appoggio.
    Il programma deve entrare necessariamente almeno in 2 "if" , di quelli che hanno i controlli su i e k, ma quando entra nel secondo noto l'errore che ho spiegato su temp.
    Effettuando un debug, noto che l'indice "save" incrementa, quindi l'errore non quello. È solo quello che ho spiegato nel primo post...


    if(k<2){
    if(matr[i][k+1].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i;
    temp[save].col=k+1;
    }
    }
    if(k>0){
    if(matr[i][k-1].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i;
    temp[save].col=k-1;
    }
    }
    if(i<2){
    if(matr[i+1][k].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i+1;
    temp[save].col=k;
    }
    }
    if(i>0){
    if(matr[i-1][k].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i-1;
    temp[save].col=k;
    }
    }

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Se scrivi save++; è perché lo vuoi fare incrementare, non è che l'interprete lo fa incrementare di sua iniziativa.

  5. #5
    Originariamente inviato da carlomarx
    Se scrivi save++; è perché lo vuoi fare incrementare, non è che l'interprete lo fa incrementare di sua iniziativa.
    Ovvio. Non è quello che intendevo. Ho evidenziato che save incrementa come voglio, quindi il problema non sta nel fatto che temp usi sempre la stessa posizione (si spiegherebbe l'errore altrimenti) !
    Mi scuso se non sono chiarissimo

  6. #6
    Per favore, se qualcun altro riesce a capire che diavolo potrebbe essere mi faccia sapere presto perchè altrimenti il mio progetto non può proseguire...

  7. #7
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Con quel codice non troverai nessuno che ti possa aiutare. Devi essere capace di mandare un codice sintetizzato il più possibile (è nel tuo interesse) e completo.

  8. #8
    Più sintetizzato di così...potete vederlo come fossero due if soli, non cambia il principio:

    if(k<2){
    if(matr[i][k+1].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i;
    temp[save].col=k+1;
    }
    }

    if(k>0){
    if(matr[i][k-1].forma==matr[i][k].forma) {
    save++;
    temp[save].row=i;
    temp[save].col=k-1;
    }
    }


    non posso mandare tutto il programma, quello è il pezzo essenziale perchè non uso temp in altri punti prima di quello, né il suo indice "save": li dichiaro e basta.
    var temp=new Array(12);
    var save=0;
    Troverò soluzioni alternative all'array, grazie lo stesso

  9. #9
    Il problema in realtà non è chiaro proprio perchè i codici non aiutano a focalizzarlo: non si sa da dove viene fuori la variabile save nè si sa cosa sia temp - una array, ok, ma si direbbe associativa visto che esibisce degli attributi. Nè si sa cosa siano k e i (dettaglio invero non da poco)

    In assenza di certezze in merito, ad esempio, a tali punti, si possono fare solo ipotesi.
    La mia (che potrebbe essere azzeccata o meno) è la seguente: il tuo codice entra (e quindi esegue) più di una espressione condizionale.
    Cioè: siccome non si tratta di sequenze di if/if else ma di if e basta, potenzialmente ogni runtime potreebbe eseguirne più di uno.
    esempio:
    k=1
    ti entra sia in

    if(k<2){

    che in

    if(k>0){

    cioè sarebbe errato pensare che se k=1 ti esegua proceduralmente solo il primo if(k<2), ti esegue quello e ANCHE il successivo.
    Non so se questo possa spiegare la replicazione delle assegnazioni, ma è un candidato plausibile (almeno dato quel che si sa) che ti vale la pena verificare forse.

  10. #10

    RISOLTO

    In realtà l'ho trovato l'errore: ogni elemento dell'array devo istanziarlo con un "new" perchè a quanto pare, senza questo considera tutti gli elementi come se fossero lo stesso solo.
    Grazie, risolto

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.