C'è una differenza tra dichiarare le variabili all'esterno o all'interno di un ciclo? [chiuso]

2

C'è qualche differenza se dovessi scrivere qualcosa del genere:

int row,col;
    for(row = 0; row < data.length; row++){
        for(col = 0; col < data[row].length;col++){
            //do something
        }//end for loop(columns)
    }//end for loop(rows)
    for(row = 0; row < data.length; row++){
        for(col = 0; col < data[row].length;col++){
            //do something
        }//end for loop(columns)
    }//end for loop(rows)

rispetto a:

    for(int row = 0; row < data.length; row++){
        for(int col = 0; col < data[row].length;col++){
            //do something
        }//end for loop(columns)
    }//end for loop(rows)
    for(int row = 0; row < data.length; row++){
        for(int col = 0; col < data[row].length;col++){
            //do something
        }//end for loop(columns)
    }//end for loop(rows)

Ci sono dei benefici da uno dei due?

    
posta user3189506 20.02.2014 - 07:31
fonte

2 risposte

2

Risposta rapida: la maggior parte delle volte non mi interessa il valore al di fuori del ciclo, quindi utilizzo il secondo modulo.

Occasionalmente desidererò il "primo indice" in cui inserirò un'interruzione (o una condizione di uscita nel ciclo) in modo che il valore rappresenti quanto ho ottenuto. Quindi userò il primo modulo, ma con una condizione di interruzione o ciclo che lo farà fermare presto.

... per esempio. trova l'indice del primo valore diverso da zero in un array.

EDIT: ho solo guardato più da vicino il tuo codice ... NON avrei MAI riutilizzato la stessa variabile di indice solo per preservare le dichiarazioni delle variabili;) lol!

    
risposta data 20.02.2014 - 07:46
fonte
2

Entrambe le versioni potrebbero avere uno scopo specifico.

1 Variabili all'interno

Utilizzato per l'iterazione (sì, so degli iteratori e del ciclo avanzato, ma usiamo il vecchio per)

2 variabili all'esterno

Diciamo che vogliamo trovare l'indice di un oggetto da qualche array e vogliamo che quell'indice utilizzi per qualcos'altro. Non è possibile utilizzare le variabili per l'ambito del ciclo perché è necessario l'indice in modo che l'indice non si trovi nell'ambito del ciclo.

Esempio:

int i;
for (i = 0; i < length; i++) {
  if (someConditionAppliedForAnElement(arr[i])) {
    break;
  }
}
if (i != length) { /* logic here */ }

Ovviamente, questo è solo un esempio, ci sono modi migliori per eseguire questa attività, ma volevo solo sottolineare che a volte l'ambito del ciclo non si adatta.

A proposito, per il tuo campione userei gli indici di scope del ciclo.

    
risposta data 20.02.2014 - 08:35
fonte

Leggi altre domande sui tag