Visualizzazione risultati 1 fino 9 di 9

Discussione: Doppio ciclo for

  1. #1
    Guest

    Predefinito Doppio ciclo for

    Ciao a tutti, non capisco perché non funzionano questi 2 cicli for insieme....
    Codice PHP:
    function Prova(){
    for(
    i=0;i<4;i++){
    for(
    j=2;j>-1;j--){
    $(
    "#div"+i).html(i+'_'+j);
    }}}

    $(
    document).ready(function(){
    Prova();
    window.setInterval("Prova();",3000);
    });
    Stampa solo 1_0, 2_0, 3_0
    Invece io vorrei fare stampare
    1_0, 2_0, 3_0
    1_1, 2_1, 3_1
    1_2, 2_2, 3_2
    1_0, 2_0, 3_0
    1_1, 2_1, 3_1
    1_2, 2_2, 3_2
    ecc..

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,276

    Predefinito

    In quel modo te le fa tutte le combinazioni (velocemente)... quindi non riesci a vedere i vari cambiamenti.

    Per capire bene, prova a inserire un alert dentro al secondo for:

    Codice:
    [...]
    for(j=2;j>-1;j--){
    $("#div"+i).html(i+'_'+j);
    alert(i+'_'+j);
    }
    [...]
    Una soluzione potrebbe essere quella di "ideare" n stati differenti. Ogni volta richiami la funzione ricorsivamente aumentando lo stato. Poi, se lo stato supera n lo azzeri: una normale ricorsiva usando però setTimeout o setInterval...

    p.s: usa l'indentazione, altrimenti non si capisce niente!

    Ciao!
    Ultima modifica di alemoppo : 16-07-2011 alle ore 20.57.55

  3. #3
    Guest

    Predefinito

    Con l'alert già avevo visto si blocca, ma con ho capito come dovrei impostare questa funzione ricorsiva come dici...

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,276

    Predefinito

    una cosa del genere (50 è un esempio):
    Codice:
    function prova(stato)
    {
         switch(stato)
         {
              case 1:
                   $("#div1").html('1_0');
                   break;
              case 2:
                   $("#div2").html('2_0');
                   break;
              //
              case 50:
                    //
                   break;
              default:
                    //
       }
        if(stato > 50)
              setTimeout("prova('1')",3000);
        else
             setTimeout("prova('"+(stato+1)+"')",3000);
    }
    (questo, se lo vuoi far fare infinite volte il ciclo).

    N.B: puoi ottimizzare molto nello switch: ad esempio, potresti sfruttare lo stato in questo modo:
    Codice:
    switch(stato)
    {
         case 1:
         case 2:
         case 3:
              $("#div"+stato).html(stato+'_0');
         //
    }
    ovviamente, dentro puoi metterci anche degli if... puoi ottimizzare come vuoi!

    Questa è un'idea... forse ce ne son altre migliori!

    Ciao!
    Ultima modifica di alemoppo : 16-07-2011 alle ore 22.46.54

  5. #5
    Guest

    Predefinito

    Provato ma non funziona non mi mostra i numeri in sequenza...

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,276

    Predefinito

    Ieri sera non avevo capito:
    Citazione Originalmente inviato da hotmailpower Visualizza messaggio
    Invece io vorrei fare stampare
    1_0, 2_0, 3_0
    1_1, 2_1, 3_1
    1_2, 2_2, 3_2
    1_0, 2_0, 3_0
    1_1, 2_1, 3_1
    1_2, 2_2, 3_2
    ecc..
    Quindi vuoi stampare ciclicamente:

    Codice:
    stato 1 -> 1_0, 2_0, 3_0
    stato 2 -> 1_1, 2_1, 3_1
    stato 3 -> 1_2, 2_2, 3_2
    Per far questo, è più semplice:

    Codice:
    function prova(stato)
    {
    	for(var i=1;i<=3;i++)
    		$("#div"+i).html(i+'_'+(stato-1));
    
    	if(stato > 2)
    		setTimeout("prova(1)",3000);
    	else
    		setTimeout("prova("+(stato+1)+")",3000);
    }
    
    $(document).ready(function(){
    prova(1);
    });
    Ciao!
    Ultima modifica di alemoppo : 17-07-2011 alle ore 11.45.59

  7. #7
    Guest

    Predefinito

    Ti ringrazio ma non funziona perché quel codice già si trova in un altra funzione e non gli posso mandare tutte le variabili che gli servono per funzionare, se ci sarebbe una soluzione più elegante...

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,276

    Predefinito

    non ho capito....

    Perché non puoi usarlo? Cosa si trova in un'altra funzione?

    Potresti usare anche setInterval() e salvarti lo stato esternamente...

    Ciao!

  9. #9
    Guest

    Predefinito

    Ti invio quello che ho fatto io con la parte da sistemare...
    Codice PHP:
    <script language="javascript">
    var
    Stand = 0,Stand2 = 0,Response = 0,Response2 = 0,Counter = 0,Lung,i=0,j=0,z=0,Num = new Array();

    function
    Prova(){
    response = "1999995";
    if(
    Response != response){
    Stand = response.length;
    if(
    Stand2 != Stand){
    Stand2 = Stand;
    $(
    "#utenti").html("");
    for(
    i=0;i<Stand;i++){
    $(
    "#utenti").append('<div id="Stand_'+i+'" class="Stand"></div>');
    }}
    Response = response;
    }
    if(
    response != Response2){
    Prova2();
    }}


    function
    Prova2(){
    Response2 = ((((Response%2) == "0") ? (Response/2) : ((Response-1)/2))+Counter);
    if(
    Response > Response2){ Counter++; }else{ Counter--; }
    Response3 = String(Response2),Lung = Response3.length,Cont = Response3.split("");
    z = 0;

    /*Parte da Sistemare*/
    for(i=0;i<Lung;i++){
    if(
    Num[i] != Cont[i]){
    for(
    j=2;j>-1;j--){
    $(
    "#Stand_"+((Lung-1)-i)).html(Cont[i]+'_'+j);
    }}}


    for(
    i=0;i<Lung;i++){ Num[i] = Cont[i]; }
    }

    $(
    document).ready(function(){
    Prova();
    window.setInterval("Prova();",3000);
    });
    </script>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •